demos源码
Context 设计目的是为了共享那些对于一个组件树而言是“全局”的数据。
如何使用
- 将初始状态传递给 React.createContext。这个方法会返回一个带有 Provider 和 Consumer 的对象。
- 使用 Provider 组件包裹在组件树的最外层,并接收一个 value 属性。value 属性可以是任何值。
- 使用 Consumer 组件,在组件树中 Provider 组件内部的任何地方都能获取到状态的子集。
ThemeContext:
1 | import React from 'react'; |
ContextCom:
1 | import React, { Component } from "react"; |
ChildCom:
1 | import React, { Component } from 'react' |
注意点
- 当 Provider 的 value 值发生变化时,它内部的所有消费组件都会重新渲染。Provider 及其内部 consumer 组件都不受制于 shouldComponentUpdate 函数。
- Context.Consumer需要函数作为子元素(function as a child)这种做法。这个函数接收当前的 context 值,返回一个 React 节点。
Class.contextType
可以通过Class.contextType
直接将Context 对象挂载到class的contextType属性,然后就可以使用this.context
对context对象进行使用。
1 | import React, { Component } from "react"; |
如何更新Context的值呢
可以通过 context 传递一个函数,使得 consumers 组件更新 context:
ContextComProVider:
1 | class ContextComProVider extends Component { |
childCom:
1 | import React, { Component } from 'react' |