zoukankan      html  css  js  c++  java
  • react中对于context的理解

    一、context旧版的基本使用
    1、context的理解
    当不想在组件树中通过逐层传递props或state的方式来传递数据时,可使用context来实现跨层级的组件数据传递。
    2、context的使用
    在使用context时需要用到两个组件,一个是context生产者Provider,通常是一个父节点,另外一个时context的消费者Consumer,通常是一个或多个子节点。所以context的使用基于生产者消费者模式。
    对于父组件(即生产者),需要通过一个静态属性(static)childContextTypes声明提供给子组件的context对象的属性,并实现一个实例getChildContext方法,返回一个代表context的对象。
    (1)getChildContext:根组件中声明,是一个函数,返回一个对象,就是context
    (2)childContextTypes:根组件中声明,指定context的结构类型,若不指定会产生错误
    (3)contextTypes:子孙组件中声明,指定要接收的context的结构类型,可以只是context的一部分结构。若没有定义,则context将会是一个空对象。
    (4)this.context:在子孙组件中通过此来获取上下文。
    3、context在如下的生命周期钩子中可以使用
    constructor(props, context)
    componentWillReceiveProps(nextProps, nextContext)
    
    shouldComponentUpdate(nextProps, nextState, nextContext)
    componentWillUpdate(nextProps, nextState, nextContext)
    
    componentDidUpdate(prevProps, prevState, prevContext)
    4、context的局限性
    (1)在组件树中,如果中间某一个组件 ShouldComponentUpdate return false 了,会阻 碍 context 的正常传值,导致子组件无法获取更新。
    (2)组件本身 extends React.PureComponent 也会阻碍 context 的更新。
    二、context新版的基本使用
    1、全局定义context对象:
    创建一个globalContext.js文件:
    import React from "react";
    const GlobalContext = React.createContext();
    export default GlobalContext;
    2、根组件引入GlobalContext,并使用GlobalContext.Provider(生产者):
    import One from "./components/one";
    import GlobalContext from "./globalContext";
    
    <GlobalContext.Provider
        value={{
            name:"zhangsan",
            age:19
            }}
    >
        <One/>
    </GlobalContext.Provider>
    3、组件引入GlobalContext并调用context,使用GlobalContext.Consumer:
    <GlobalContext.Consumer>
        {
            context => {
                console.log(context)
                return (
                    <div>
                        <h2>{context.name}</h2> 
                        <h2>{context.age}</h2>
                    </div>
                )
            }
        }
    </GlobalContext.Consumer>
  • 相关阅读:
    记录一次对接XX支付SDK过程中报错问题
    接口回调(重点是理解)
    jQuery form插件的使用--ajaxForm()和ajaxSubmit()的可选参数项对象
    如何通过submit提交form表单获取后台传来的返回值
    Unsupported major.minor version 52.0
    js获取input file路径改变图像地址
    html 横线的代码
    FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换
    UUID不失精度,长度改进
    java Date时间的各种转换方式和Mysql存时间类型字段的分析
  • 原文地址:https://www.cnblogs.com/Leslie-Cheung1584304774/p/10734634.html
Copyright © 2011-2022 走看看