19、20 Context API

安装React Dev Tool

Context对象.displayName

  • 使用别名
    在这里插入图片描述

  • 不使用别名
    在这里插入图片描述

React.createContext

  • 创建指定的Context对象
  • 组件会找离自己最近的Provider,获取其value
  • 变量名都叫value的情况,就近取AContext
  • 变量名有所区分,两个value都可以获取
  • 可以多组Consumer同时使用
    在这里插入图片描述
    在这里插入图片描述

Context.Provider

  • Context.Provider是通过React.createContext创建出的上下文对象里的一个组件,组件里可以插入其他组件(其他组件订阅了这个Context)
  • 通过Provider的value属性将数据传递给Consumer组件
  • value变化,插入Provider的组件都会重新渲染
  • value新旧值的对比算法和Object.is相同 MDN相等性判断
  • 不用<Context.Provider>包裹,则匹配不到Provider,则使用默认值(其他情况均不使用默认参数)
  • 注意,用Provider包裹,但不提供value值/或提供undefined,则子组件获取到的是undefined,不会使用默认值
// 在对数学有要求的业务中,如温度的判断,+0 -0应不同,可区分
Object.is(-0, +0) // false
Object.is(NaN, NaN) // true

Context.Consumer

  • 订阅Context的变更
  • Consumer内部使用函数作为子元素 → function as a child(有一类组件,内部使用函数作为子元素)
  • 函数接收离Context最近的Provider提供的value
  • 没有Provider则取defaultValue

contextType

  • 正确写法static contextType = CityContext
  • 赋值的一定是由React.createContext()创建出的Context对象
  • static contextType对于contextType不赋值会报错,static a普通属性不赋值则不会报错
  • 是静态属性,用ES3的写法是Selector.contextType = CityContext
  • 不管是否指定contextType ,this.context都存在,只是{}和有内容的区别
  • 指定contextType即给当前环境下的Context重新指定引用
  • this.context → CityContext
  • 在生命周期函数和render函数中都可以访问
  • Provider、Consumer组件比contextType 语义化更好

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值