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>
react中对于context的理解的更多相关文章
- React中的Context——从父组件传递数据
简介:在React中,数据可以以流的形式自上而下的传递,每当你使用一个组件的时候,你可以看到组件的props属性会自上而下的传递.但是,在某些情况下,我们不想通过父组件的props属性一级一级的往下传 ...
- React中diff算法的理解
React中diff算法的理解 diff算法用来计算出Virtual DOM中改变的部分,然后针对该部分进行DOM操作,而不用重新渲染整个页面,渲染整个DOM结构的过程中开销是很大的,需要浏览器对DO ...
- react中的jsx详细理解
这是官网上的一个简单的例子 const name = 'Josh Perez'; const element = <h1>Hello, {name}</h1>; ReactDO ...
- react中this.setState的理解
this.setState作用? 在react中要修改this.state要使用this.setState,因为this.state只是一个对象,单纯的修改state并不会触发ui更新.所以我们需要用 ...
- react中的context的基础用法
context提供了一种数据共享的机制,里面有两个关键概念——provider,consumer,下面做一些key features描述. 参考网址:https://react.docschina.o ...
- react中key值的理解
react利用key来识别组件,它是一种身份标识标识,相同的key react认为是同一个组件,这样后续相同的key对应组件都不会被创建有了key属性后,就可以与组件建立了一种对应关系,react根据 ...
- 对 React Context 的理解以及应用
在React的官方文档中,Context被归类为高级部分(Advanced),属于React的高级API,但官方并不建议在稳定版的App中使用Context. 很多优秀的React组件都通过Conte ...
- 深入理解react中的虚拟DOM、diff算法
文章结构: React中的虚拟DOM是什么? 虚拟DOM的简单实现(diff算法) 虚拟DOM的内部工作原理 React中的虚拟DOM与Vue中的虚拟DOM比较 React中的虚拟DOM是什么? ...
- 绝对让你理解Android中的Context
这个问题是StackOverFlow上面一个热门的问题What is Context in Android? 整理这篇文章的目的是Context确实是一个非常抽象的东西.我们在项目中随手都会用到它,但 ...
随机推荐
- Java课程寒假之回答问题:如何将你的兴趣化为可以立足于社会的资本
在学校的时候干过几次兼职,算是无聊时候的外快吧,有一次是去辅导机构,在考试期间监考学生,前后大概四个小时,最后拿了四十五并且管了一顿饭,不得不说,小学生是真的皮,考试的时候有的爱讲话,有的是写完之后开 ...
- ActivityRouter 框架简单实用
ActivityRouter组件化开发小助手用法如下: 跟目录build.gradle dependencies { // activityRouter classpath 'com.neenbeda ...
- verilog中signed的使用
1.在verilog中有时会用signed修饰符来修饰定义的数据,运算的时候也会用$signed()任务来强制转换数据,那么signed的修饰是为什么呢,是为了区分有符号数和无符号数的加法和乘法吗?其 ...
- 输入正整数n,求各位数字和
import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/5 10:24 * @description ...
- 移动端web开发常见问题
1.移动端如何定义字体font-family 三大手机系统的字体: ios 系统 默认中文字体是Heiti SC 默认英文字体是Helvetica 默认数字字体是HelveticaNeue 无微软雅黑 ...
- 小甲鱼零基础python课后题 P21 020函数:内嵌函数和闭包函数
测试题 0.如果希望在函数中修改全局变量的值,应该使用什么关键字? 答:globe 1.在嵌套函数中,如果希望在内部函数修改外部函数的局部变量,应该使用什么关键字? 答:nonlocal 2.pyth ...
- yii2 gridview checkbox
给checkbox(在GridView里的)添加一个value 控制器:$dataProvidermStu->key = "student_no"; view:[ 'clas ...
- Akka并发编程框架 -概念模型(Akka.net或者Orleans)
Akka 来构建具备高容错性.可以横向扩展的分布式网络应用程序. Akka 通常是指一个强大的分布式工具集,用于协调远程计算资源来进行一些工作 Akka 工具集以及Actor 模型的介绍. Actor ...
- 聊天机器人開發好消息!!DIALOGFLOW與微信的天作之合!!
虽然DIALOGFLOW暂未能够与微信(WECHAT)或企业微信(ENTERPRISE WECHAT)进行任何技制上的连接INTERGRATION),确实限制了我们这些聊天机器人开发者的创作空间,因为 ...
- 转:三款免费好用的Gif录屏神器
原文链接:三款免费好用的Gif录屏神器 自己用了 ScreenToGif 版本2.14.1下载地址 原文内容: 三款免费好用的Gif录屏神器 2018年06月02日 18:52:21 独家雨 ...