react context

作者: IOneStar | 来源:发表于2021-12-20 21:23 被阅读0次

react context

React.createContext, Provider(数据提供者), Consumer(数据消费者), Class.contextType

  1. React.createContext 创建一组 Provider,将数据下发给自身组件树中任意层级的 Consumer。
const appContext = React.createContext(defaultValue);
const { Provider, Consumer } = appContext;
  1. Provider 对组件树进行包裹,并传入 value 属性
<Provider value={title: this.state.title}>
    <Title/>
<Provider/>
  1. Consumer,需要接受一个返回组件的函数作为子元素
<Consumer>
    {value => <div>{value.title}<div/>}
<Consumer/>
  1. Class.contextType
class MyClass extends React.Component {
  componentDidMount() {
    let value = this.context;
    /* 在组件挂载完成后,使用 MyContext 组件的值来执行一些有副作用的操作 */
  }
  componentDidUpdate() {
    let value = this.context;
    /* ... */
  }
  componentWillUnmount() {
    let value = this.context;
    /* ... */
  }
  render() {
    let value = this.context;
    /* 基于 MyContext 组件的值进行渲染 */
  }
}
MyClass.contextType = MyContext;

此属性可以让你使用this.context来获取最近Context上的值。这儿有个疑问:静态属性指的是 Class 本身的属性,即Class.propName,而不是定义在实例对象(this)上的属性。?
也可以使用 使用 static 这个类属性来初始化contextType
验证如下,

class A {
    static prop = 1;
    
    getProp() {
        console.log(this.prop);
    }
}
const a = new A();
console.log(a.prop); // undefined
a.getProp(); // undefined
class MyClass extends React.Component {
  static contextType = MyContext;
  render() {
    let value = this.context;
    /* 基于这个值进行渲染工作 */
  }
}

useContext<MyContext>
相当于,static contextType = MyContext<MyContext.Consumer>
Class.contextType 和 Context.Consumer 的区别:
Class.contextType 使用时会自动在组件上添加一个属性context,存储离当前组件最近的Provider提供的数据,不能写多个

  1. Static contextType and class.contextType
  2. useContext
  3. context.Consumer

三种消费context的形式。

参考

React 之 Context 源码分析与实践

相关文章

  • 2018-08-08

    React 高级指南 React 新版上下文(context) context ?答:上下文(Context) 提...

  • React中不常用的功能——Context

    React中不常用的功能——Context Context React源码版本16.8 基本用法 跨层级通信 Co...

  • 疑问汇总

    1. react context是怎样实现 跨组件通信的? 从Context源码实现谈React性能优化[http...

  • react context

    react context React.createContext, Provider(数据提供者), Consu...

  • React 拾遗之 Context

    React 拾遗之 Context React.js 的 context 其实像就是组件树上某颗子树的全局变量 使...

  • react-redux源码解读

    "react-redux": "^5.0.6" redux和react之间的桥梁是react的context,re...

  • React-深入探究Context(1)

    前言 React组件中的Context与Android中的Context类似,都可以理解为上下文。而React中的...

  • react 笔记

    react 基本概念解析 react 的组件声明周期 react 高阶组件,context, redux 等高级...

  • React context

    Contexts 是React的一个重要属性,但是到目前为止,这个属性在正式的文档里面还没有对它进行正式介绍,在 ...

  • 【React】Context

    介绍 Contexts 是React的一个重要属性,但是到目前为止,这个属性在正式的文档里面还没有对它进行正式介绍...

网友评论

    本文标题:react context

    本文链接:https://www.haomeiwen.com/subject/ctttqrtx.html