React兄弟组件之间的通信

Child2组件需要去更改Child1组件中的数据。
因为Child1和Child2是兄弟组件
所以数据和事件都放在最进的父级组件中去

兄弟组件通信的简单使用

import React from 'react'; //这个是react这个包,我们是需要的
import ReactDOM from 'react-dom'; //这个是react的虚拟dom class PartentHello extends React.Component {
state = {
num:10
} // Child2中的组件事件的回调更改Child1中的数据
addHandler = () => {
this.setState({
num: this.state.num+10
})
} render() {
return (
<div>
<Child1 num={ this.state.num}></Child1>
<Child2 addAdd={ this.addHandler}></Child2>
</div>
)
}
} // 组件 Child1
const Child1 = props => {
return (
<h1>数量{props.num }</h1>
)
} // 组件 Child2
const Child2 = props => {
return (
<button onClick={()=>props.addAdd()}>增加</button>
)
} ReactDOM.render(<PartentHello></PartentHello>,document.getElementById('root'))

兄弟组件

将共享状态提升到最近的公共父组件中。
由公共父组件来管理这个状态(数据,事件)
它的思想就是状态提升

组件跨级传递 Context

当Child1组件中有Child2组件。
Child2组件中有Child3组件。
Child3中有Child4组件
我们怎么将Child1中的数据传递给Child4呢??? 这个时候,我们就可以使用 Context.
他主要运用在数据跨组件传递。
如:背景颜色。 语言等

使用Context

import React from 'react'; //这个是react这个包,我们是需要的
import ReactDOM from 'react-dom'; //这个是react的虚拟dom
import './index.css'
// Provider是提供者, Consumer接受者
const { Provider, Consumer } = React.createContext() class PartentHello extends React.Component {
render() {
return (
<Provider value='传递的数据'>
<div className='box'>
<Child1></Child1>
</div>
</Provider>
)
}
} // 组件 Child1
const Child1 = () => {
return (
<div className='Child1'>
<h1> 我是Child1组件 </h1>
<Child2></Child2>
</div>
)
} // 组件 Child2
const Child2 = () => {
return (
<div className='Child2'>
<h1> 我是Child2组件 </h1>
<Child3></Child3>
</div>
)
} // 组件 Child3
const Child3 = () => {
return (
<div className='Child3'>
<h1> 我是Child3组件 </h1>
<Consumer>
{/* 千万要注意 Consumer不能有其他内容,否者会报错 */}
{data => <span>{data}</span>}
</Consumer>
</div>
)
} ReactDOM.render(<PartentHello></PartentHello>,document.getElementById('root'))

总结 Context

使用Context的时候,他提供了两个组件。
分别是 Provider, Consumer。
Provider组件是提供数据的。Consumer是接受数据的。
Provider是使用value进行传递。
Consumer通过下面这样的方法进行接收数据
<Consumer>
{data => <span>{data}</span>}
</Consumer>

React中兄弟组件通信和组件跨级传递Context的使用的更多相关文章

  1. react第六单元(react组件通信-父子组件通信-子父组件通信-跨级组件的传参方式-context方式的传参)

    第六单元(react组件通信-父子组件通信-子父组件通信-跨级组件的传参方式-context方式的传参) #课程目标 1.梳理react组件之间的关系 2.掌握父子传值的方法 3.掌握子父传值的方法 ...

  2. $attrs/inheritAttrs可以实现组件的跨级传递

    $attrs/inheritAttrs可以实现组件的跨级传递  // 问题1  为什么this.$attrs可以得到主  传递过来的值         //$attrs 说明          //  ...

  3. 【Vue】计算属性 监听属性 组件通信 动态组件 插槽 vue-cli脚手架

    目录 昨日回顾 1 计算属性 插值语法+函数 使用计算属性 计算属性重写过滤案例 2 监听属性 3 组件介绍和定义 组件之间数据隔离 4 组件通信 父子通信之父传子 父子通信之子传父 ref属性 扩展 ...

  4. React中兄弟组件传值

    兄弟组件传值 实际上是间接的通过第三方来实现传值,举例,第一个儿子把值传给父亲,父亲在把这个值传给第二个儿子,这样就实现了兄弟组件传值 来看代码: 父组件代码 import React from 'r ...

  5. react 中的无状态函数式组件

    无状态函数式组件,顾名思义,无状态,也就是你无法使用State,也无法使用组件的生命周期方法,这就决定了函数组件都是展示性组件,接收Props,渲染DOM,而不关注其他逻辑. 其实无状态函数式组件也是 ...

  6. Vue 组件通信(组件间通信)

    1.中央事件总线bus <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&qu ...

  7. [转] React 中组件间通信的几种方式

    在使用 React 的过程中,不可避免的需要组件间进行消息传递(通信),组件间通信大体有下面几种情况: 父组件向子组件通信 子组件向父组件通信 跨级组件之间通信 非嵌套组件间通信 下面依次说下这几种通 ...

  8. React 中组件间通信的几种方式

    在使用 React 的过程中,不可避免的需要组件间进行消息传递(通信),组件间通信大体有下面几种情况: 父组件向子组件通信 子组件向父组件通信 非嵌套组件间通信 跨级组件之间通信 1.父组件向子组件通 ...

  9. React中组件通信的几种方式

    https://segmentfault.com/a/1190000012361461 需要组件之进行通信的几种情况 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 ...

  10. react组件通信那些事儿

    父组件是调用组件的组件.现在看来,感觉父组件就是一个壳子,定义好壳子里面会有什么,而子组件是一个具体的实现,说明,会用到什么东西,如果有这些东西,会进行什么操作.总之,父组件是材料,有水和泥,子组件告 ...

随机推荐

  1. 传统到敏捷的转型中,谁更适合做Scrum Master?

    摘要:本文主要讲述的是从传统到敏捷Scrum团队转型中,对Scrum Master这一角色的分析. 本文分享自华为云社区<传统到敏捷的转型中,谁更适合做Scrum Master?>,作者: ...

  2. typescript参照C#/java/swift学习小结

    学typescript,首先肯定是看官方文档,http://www.typescriptlang.org,国内翻译网站:https://www.tslang.cn 说实话,这个文档看下去,是昏昏欲睡的 ...

  3. Apache Pulsar 在火山引擎 EMR 的集成与场景

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近年来,基于云原生架构的新一代消息队列和流处理引擎 Apache Pulsar 在大数据领域发挥着愈发重要的作用, ...

  4. 【TCP】学习笔记:application/octet-stream

    当浏览器在请求资源时,会通过http返回头中的content-type决定如何显示/处理将要加载的数据,如果这个类型浏览器能够支持阅览,浏览器就会直接展示该资源,比如png.jpeg.video等格式 ...

  5. 【每日一题】40. 旅游 (树形DP解决树的最大独立集)

    补题链接:Here 算法涉及:树形DP寻找树上最大独立集 一开始想到是利用 树形DP 找树的直径问题,但这里由于可以利用走过的点衍生,所以不符合树的直径问题 查询了一下资料这道题是属于: 树的最大独立 ...

  6. 牛客 | 小G的约数引起的对于 整数分块 学习

    整除分块是个啥:要求\(∑_{i = 1}^n{n/i}\) 的值,这时候暴力需要O(n)的时间.由于这个区间是连续的,且'/'是向下取整,当i不能整除k时,n/i会等于最小的i(也就是区间最左边的值 ...

  7. Codeforces #698 Div.2 (A~D题)个人题解记录

    1478A. Nezzar and Colorful Balls 看半天题,然后才发现是统计最大值. int _; int main() { ios_base::sync_with_stdio(fal ...

  8. Spring EL 表达式

    本篇讲述了Spring Expression Language -- 即Spring3中功能丰富强大的表达式语言,简称SpEL. SpEL是类似于OGNL和JSF EL的表达式语言,能够在运行时构建复 ...

  9. 从“预见”到“遇见”SAE 引领应用步入 Serverless 全托管新时代

    --黛忻 阿里云SAE产品经理 近年来,企业的数字化随着互联网的普及发展越来越快,技术架构也是几经更迭,尤其是在线业务部分.从最初的单体应用到分布式应用再到云原生应用,出现了进阶式的变化. 带来便利的 ...

  10. Java中的日期计算

    Java中的日期计算:详细指南 日期计算是Java编程中的一个常见任务,无论是在日常应用开发还是在企业级系统中.本文详细介绍了如何在Java中进行日期计算,包括添加天数.计算两个日期之间的差异以及格式 ...