📜  React 中的上下文(1)

📅  最后修改于: 2023-12-03 15:04:49.809000             🧑  作者: Mango

React 中的上下文

在 React 中,上下文提供了一种在组件之间共享数据的方式,而不必通过一层层的组件传递 props。

上下文 API

React 提供了 React.createContext 方法来创建上下文。

const MyContext = React.createContext(defaultValue);

创建的上下文包含了一个 Provider 组件和一个 Consumer 组件。

Provider 用于向下传递数据,Consumer 用于从上层组件获取数据。一个 Provider 可以有多个 Consumer。

<MyContext.Provider value={value}>
  <MyComponent />
</MyContext.Provider>

<MyContext.Consumer>
  {value => /*使用value*/}
</MyContext.Consumer>
上下文使用

在组件中使用上下文时,需要通过 contextType 属性进行注册。

class MyClass extends React.Component {
  static contextType = MyContext;

  render() {
    const value = this.context;
    /*渲染组件*/
  }
}

也可以通过 <Consumer> 组件来使用上下文。

<MyContext.Consumer>
  {value => /*使用value*/}
</MyContext.Consumer>
提高上下文性能

使用上下文会导致组件之间的耦合度增加,会使得组件的可重用性降低。

在需要使用上下文的情况下,可以使用 shouldComponentUpdateReact.memo 优化组件性能。

class MyComponent extends React.Component {
  shouldComponentUpdate(nextProps, nextState, nextContext) {
    return this.context.someValue !== nextContext.someValue;
  }
  render() {
    /*渲染组件*/
  }
}

const MyMemoComponent = React.memo(MyComponent);
总结

上下文提供了一种在组件之间共享数据的方式,但需要注意可重用性和性能问题。使用上下文可以简化组件间传递数据的过程,提高代码可读性和维护性。