当最外层父组件需要给最底层子组件传递数据时,按照react中组件通信方式,需要使用props一层层组件向下传递,当组件层次较多时,会比较繁琐;

这时我们可以使用Context,Context作用就是跨组件传递数据;

使用步骤:

1. 调用React.createContext() 创建Provider(用来提供数据) 和 Consumer(用来消费数据) 两个组件;

const {Provider,Consumer} = React.createContext();

2. 使用Provider组件作为父节点包裹我们的应用(根组件);

3. 设置value属性,表示要传递的数据;

<Provider value='name'><div><Child></Child></div>
</Provider>

4. 调用 Consumer组件接收数据;

<Consumer>{(data)=>{return  <span>data参数表示接收到的数据---{data}}</span>}
</Consumer>

小案例如下:

index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';// 创建Context
const {Provider,Consumer} = React.createContext();class App extends React.Component{state={name:'张三'}render(){return(<Provider value={this.state.name}><div className='app'>App<Node /></div></Provider>)}
}class Node extends React.Component{render(){return (<div className='node'>Node<SubNode /></div>)}
}class SubNode extends React.Component{render(){return (<div className='subNode'>SubNode<Child /></div>)}
}class Child extends React.Component{render(){return (<div className='child'>我是最底层子组件 Child  <Consumer>{(data)=>{return <span>  Context传递过来的数据为: {data}</span>}}</Consumer></div>)}
}ReactDOM.render(<App />,document.getElementById('root'))

index.css:

body {margin: 0;font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen','Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;
}code {font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',monospace;
}.app{background-color: rgb(240, 26, 61);padding: 10px;
}.node{background-color: rgb(247, 69, 99);padding: 10px;}
.subNode{padding: 10px;background-color: rgb(252, 160, 175);
}
.child{padding: 10px;background-color: rgb(247, 204, 209);
}

React-12 Context的使用相关推荐

  1. [react] 说说Context有哪些属性?

    [react] 说说Context有哪些属性? context属于一种解决组件间层级过多传递数据的问题,避免了层层嵌套的通过props传递的形式,同时对于不需要使用到redux时,是一种解决方案,关于 ...

  2. React 中 Context 和 contextType的使用

    React 中 Context 的使用 context Context 提供了一种方式,能够让数据在组件树中传递时不必一级一级的手动传递 一般情况下,数据在组件中,要一级一级的传递,单向数据流,比如P ...

  3. react中context到底是如何传递的-源码分析

    react中使用context 基本要求就是 父组件中声明Parent.prototype.getChildContext 父组件中声明Parent.childContextType 子组件声明 Ch ...

  4. React上下文-Context

    导语 redux解决的核心问题是父子兄弟等组件件传值很麻烦的问题,于是有了一个"通讯班"--redux,这个通讯班可以帮我们把组件之间的状态整合到一起,然后修改也统一修改.我们觉得 ...

  5. React中Context API的应用

    在之前react的工程项目中,关于数据流动以及父子组件中数据通信大都是通过react-redux.redux来完成,虽然可以解决问题,但是这种数据管理是较为复杂的,在最新的react16.3中推出了C ...

  6. React手稿 - Context

    Context Context提供了除props之外的传参数的方式. Context是全局跨组件传递数据的. API React.createContext const {Provider, Cons ...

  7. React 新 Context API 在前端状态管理的实践

    2019独角兽企业重金招聘Python工程师标准>>> 本文转载至:今日头条技术博客 众所周知,React的单向数据流模式导致状态只能一级一级的由父组件传递到子组件,在大中型应用中较 ...

  8. React中Context的使用

    一.概述 Context 提供了一种在组件之间共享值的方式,而不必显式地通过组件树的逐层传递 props.如果获取值和使用值的层级相隔很远,或者需要使用这个值的组件很多很分散,则可以使用Context ...

  9. React的Context

  10. React性能优化之Context

    先来说说Context的作用 react之类的mvvm框架有个痛点想必大家都遇到过,那就是祖孙组件之间的通信 现在组件之间的通信规范是: 父 -> 子:属性绑定props 子 -> 父:事 ...

最新文章

  1. 程序员的小天地:注释中的快乐
  2. Android之ListView异步加载图片且仅显示可见子项中的图片
  3. sdut 1500 Message Flood
  4. 【LeetCode笔记】96. 不同的二叉搜索树(Java、动态规划)
  5. python中for语句的使用_对Python中for复合语句的使用示例讲解
  6. wxpython textctrl_wxpython中Textctrl回车事件无效的解决方法
  7. 调试安装php源码,Xdebug的安装与配置,帮助调试PHP程序
  8. mac系统maven spring mvc小试牛刀
  9. vue实现导出excel的两种方式
  10. 国家开放大学计算机网络技术毕业设计,精编国家开放大学毕业论文:购物网站设计...
  11. ips 测试软件,IPS测试方法.doc
  12. 写论文引用参考文献详细教程
  13. docker安装php拓展
  14. 明德扬FmcAd9144 产品说明书
  15. HDU - 6578 Blank DP + 滚动数组
  16. Ubuntu下安装Datax-web数据交换平台
  17. C语言基础——数据输入输出
  18. 整数运算(加减法)详解
  19. 百度:度娘换上时尚的比基尼亮瞎你的眼睛
  20. R语言与RStudio的下载与安装方法

热门文章

  1. visio2019安装教程
  2. bypassuac提权
  3. RemObjects_SDK平台远程处理框架
  4. FA 工业自动化设备设计基础
  5. 一个入门级别的前端打包工具
  6. C++代码示例2 ~ 求立方体的面积和体积并求出两个立方体是否相等
  7. 计算机组成原理上机试卷,计算机组成原理试卷及答案
  8. HTML+CSS零基础学习笔记(二)
  9. hp打印机一直显示正在打印中_安装惠普打印机出现“新设备现已连接”一直不动怎么办?...
  10. 博弈论开发工具Gambit的Python包安装