1
0
Fork 0
Obsidian 管理的个人笔记仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

22 lines
1.3 KiB

# 简单的 React 思考 - Context
关于 React 中 Context 作为状态管理工具的思考具体可以这一篇 [[React 状态管理工具的简单思考]]
这里主要是对 Context API 的简单记录
### React.createContext
```javascript
const MyContext = React.createContext(defaultValue)
```
createContext 会创建一个 Context 对象,每个 Context 对象都会返回一个 Provieder 组件,它的子组件会订阅 Context 的变化
```javascript
<MyContext.Provider value={value} />
```
订阅了 Context 的组件会在组件树中查找离自己最近的 Provider 中读取到 Context 值也就是 Provider 中的 value 属性,只有在找不到 Provider 时,createContext 中的 defaultValue 参数才会生效,但是将 underfined 传递给 Provider 的时候,defaultValue 并不会生效。
多个 Provider 可以嵌套使用,里层的会覆盖外层的数据。
当 Provider 中的 value 值发生变化时,它内部的所有消费组件也就是子组件都会重新渲染,这个用于判断值是否发生变化的方法和 Object.is 使用了同样的算法, 也就是说如果 value 是一个引用类型,可能会导致一些意外的问题
在 Hook 之前,在 React Class 组件中使用和消费 Context 的值可以使用 contextType 和 Consumer。
```javascript
class MyClass extenet
```