react上下文context使用教程

context优缺点:
优点:跨组件访问数据
缺点:react组件树种某个上级组件shouldComponetUpdate 返回false,当context更新时,不会引起下级组件更新

定义全局context对象

globalContext.js

import React from 'react'
const GlobalContext = React.createContext()
export default GlobalContext

根组件引入GlobalContext,并使用GlobalContext.Provider(生产者)

<GlobalContext.Provider 
  value={{
    background: 'green', 
    color: 'white',
    content:this.state.content,
    methodA:this.changeStateByChildren,
    global: { ...this.state, userInfo: this.props.userinfo },
          changeGlobalState: (state) => {
            this.setState({ ...state });
          }, //通过函数改变值
  }}
>
//注意:传入的value为根context对象的值,如果是动态的,使用状态管理
</GlobalContext.Provider>  

改变值

改变context的值

import GlobalContext from "globalContext.js";
class Fbf extends Component {
static contextType = GlobalContext;
// 申明静态变量、contextType 将 context 直接赋值于 contextType
//contextType 只能在类组件中使用
//一个组件如果有多个 consumer , contextType 只对其中一个有效,所以说,contextType 只能有一个
componentDidMount() {
  const context = this.context;
  // 在函数中 可以直接 访问 this.context 获取共享变量、这样就可以不使用 consumer
    context.changeGlobalState({
      RegionId: selectedOptions[len].key,
      RegionName: selectedOptions[len].value,
    }); //通过函数改变值
    }
componentWillReceiveProps = (nextProps, nextContext) => {
    if (
      nextContext.global.userRegion &&
      this.context.global.userRegion != nextContext.global.userRegion
    ) {
      this.getData(nextContext.global.userRegion);
    }
  }; //如果值有变化 则更新
}

使用值

需要使用context值的某个组件

import GlobalContext from "globalContext.js";
class Fbf extends Component {
 const context = useContext(GlobalContext);
 //useContext()钩子函数用来引入Context对象,从中获取context 属性
}

欢迎交流!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值