当前位置:网站首页>兄弟组件通信context
兄弟组件通信context
2022-08-03 16:22:00 【是张鱼小丸子鸭】
context介绍
在平常我们使用react中,数据都是自顶而下的传递方式,如果在顶层组件中的state中存储数据,在不借助任何第三方的状态管理框架的情况下,想在子组件中获取顶层组件的数据,唯一的方法就是一层层进行数据的传递,即使两者之间的组件根本不需要该数据,如果层级越深,层层传递数据可谓是灾难,所以context的出现就解决了这一问题,context是一种跨越层级传递值的一种方法,
context实现步骤
兄弟组件起到的作用类似中间人的模式,先子传父,再父传子
context状态传递数据
先定义一个空对象,抛出一个React.createContext(默认值),结构赋值获取Provider和Consumer组件
根组件中定义在需要的位置使用Context的provider
定义contextType获取数据,或者也可以使用Consumer获取多个内容
代码展示
context.js组件
import React from 'react';
//定义一个对象的数据
let context = React.createContext(null);
//抛出对象的内容
export const {Provider,Consumer} = context;
App.js组件
层级关系:App->Text->Span
我们直接在顶层的组件里使用Provider组件,并且Provider组件有一个value属性用于传递context的实际的value。然后我们就可以在底层的Child组件中得到这些value来使用。
import React from 'react';
import './App.css';
import { Provider, Consumer } from "./context/index";
class App extends React.Component {
constructor() {
super();
this.state = {
color: "#FF0000"
}
}
changeColor = () => {
console.log(this.refs.colors.value)
this.setState({
color: this.refs.colors.value
})
}
render() {
let { color } = this.state;
return (
<Provider value={
{ color: color, fontSize: "24px" }}>
<div>
<input type="color" ref="colors" onChange={this.changeColor} />
<Text />
</div>
</Provider>
)
}
}
function Text(props) {
return (
<div>
<h4>Text子组件</h4>
<Span />
</div>
)
}
function Span(props) {
return (
<div>
{/* 接受Provier传递的数据 */}
<Consumer>
{
(context) => {
console.log(context)
return (
<span style={context}>Hello React</span>
)
}
}
</Consumer>
</div>
)
}
export default App;
使用场景:
当我们想要跨层级传递数据时,而数据本身要传递的地方不多,这个时候往往不想再引入一个更复杂的状态管理框架(如redux等),这个时候,context会是一个十分不错的选择
边栏推荐
- MATLAB | 七夕节快到了,还不给朋友安排上这个咕呱小青蛙?
- Small Tools(4) 整合Seata1.5.2分布式事务
- To add digital wings to education, NetEase Yunxin released the overall solution of "Internet + Education"
- MySQL窗口函数 OVER()函数介绍
- 元宇宙系列--Value creation in the metaverse
- CPU个数_核心数_线程数之间的关系
- How to analyze the weekly activity rate?
- C专家编程 第3章 分析C语言的声明 3.9 轻松一下---驱动物理实体的软件
- 机器人开发--Universal Scene Description(USD)
- 可复现、开放科研、跨学科合作:数据驱动下的科研趋势及应用方案
猜你喜欢
Windows 事件查看器记录到 MYSQL
【QT】Qt 给已经开发好的程序快速封装成动态库
详谈RDMA技术原理和三种实现方式
【深度学习】今日bug(8月2)
一文看懂推荐系统:召回02:Swing 模型,和itemCF很相似,区别在于计算相似度的方法不一样
leetcode:187. 重复的DNA序列
"Avnet Embedded Weekly" Issue 276: 2022.07.25--2022.07.31
一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程
Introduction to spark learning - 1
黄致绮 荣获第六季完美童模全球总决赛 全国总冠军
随机推荐
将 Windows 事件日志错误加载到 SQL 表中
WordPress建站技术笔记
C专家编程 第3章 分析C语言的声明 3.1 只有编译器才会喜欢的语法
[QT] Qt project demo: data is displayed on the ui interface, double-click the mouse to display specific information in a pop-up window
高薪程序员&面试题精讲系列132之微服务之间如何进行通信?服务熔断是怎么回事?你熟悉Hystrix吗?
uniapp的webview滑动缩放
一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程
TCP 可靠吗?为什么?
To participate in sweepstakes, incoming new programmers magazine welfare!
带你了解什么是 Web3.0
C专家编程 第2章 这不是Bug,而是语言特性 2.1 这关语言特性何事,在Fortran里这就是Bug呀
window.open does not show favicon.icon
Hannah荣获第六季完美童模全球总决赛全球人气总冠军
DataGrip:非常好用的数据库工具,安装与使用教程,亮点介绍
MPLS的wpn实验
CPU个数_核心数_线程数之间的关系
如何分析周活跃率?
C专家编程 第3章 分析C语言的声明 3.2 声明是如何形成的
Introduction to spark learning - 1
Small Tools (4) integrated Seata1.5.2 distributed transactions