displayName

针对 DevTool 用来显示自定义 Context 的名字,默认为 Context.Provider

React.createContext

创建一个指定的 Context 对象,组件会找离自己最近的 Provider,获取其 value,
如果没有匹配到 Provider 就使用 default value,其它情况均不使用默认参数

Context.Provider

通过 React.createContext 上下文对象里的一个组件
Provider 组件可以插入其他组件,以订阅这个 Context
通过 Provider 的 value 属性来将数据传递给 Consumer 组件
value 变化,插入 Provider 的组件都会重新渲染
new and old value 的对比是与 Object.is 相同的算法

Context.Consumer

使用 Provider 提供的 value,最大的作用是订阅 Context 的变更
Consumer 内部使用函数作为子元素 function as a child

  • 有一种组件是用函数作为其子组件

函数接收 context 最近的 Provider 提供的 value

  • 管道机制

没有有 Provider,就会拿 defaultValue

如果不用 Consumer 也可以用 static contextType 赋值为一个 context 对象,然后用 this.context 拿到 context 对象的内容。
但最好的方式是用 Provider 和 Consumer