react跨组件通信
在react没有类似vue中的事件总线来解决这个问题,一是我们借助它们共同的父级组件通过代理的方式来实现,但过程会相当繁锁。react提供了Context来实现跨组件通信, 而不必显式地通过组件树的逐层传递 props。
import React, { Component, createContext } from 'react'
const {
Provider,
Consumer
} = createContext()
祖先与子孙之间的通信


组件节点
import React, { Component } from 'react'
import Cmp2 from './Cmp2'
export default class Cmp1 extends Component {
static contextType = MyContext
state = {
userinfo: {
username: '张三',
age: 20
}
}
render() {
return (
<div>
{/* 发布一个消息 父子向下N多层的传递 祖先与后代的关系 */}
<MyContext.Provider value={this.state.userinfo}>
<Cmp2 />
</MyContext.Provider>
</div>
)
}
}
子孙节点
import React, { Component } from 'react'
import MyContext from '../context/Bus'
export default class Cmp2 extends Component {
// 统一数据源中的 context中的参数据数据
// static contextType = MyContext
render() {
// console.log(this.context)
return (
<div>
{/* {this.context} */}
{/* 消费一下 */}
<MyContext.Consumer>
{
// 函数 参数就是你订阅的数据
value => (
<div>
您的姓名为:{value.username}
</div>
)
}
</MyContext.Consumer>
</div>
)
}
}
Bus.js文件
import React, { createContext } from 'react'
const db = {
user1: {
username: '张三'
},
user2: {
username: '李四'
}
}
// 如果createContext中有参数值,则表示 Provider中的没有写value值
//相当于value的默认值
// 使用默认值,可以实现平级
// Bus强一点,强在有数据 比vuex弱很多,只能获取
// export const MyContext = createContext(db.user1)
const MyContext = createContext(db.user1)
export {
db,
MyContext as default
}
react跨组件通信的更多相关文章
- redux搭配react-redux进行跨组件通信开发
Redux API 作用 createStore 用于创建一个store对象 bindActionCreators 用于简化操作,不用开发者手动触发dispatch React-redux API 作 ...
- Regular进阶: 跨组件通信
本文由作者郑海波授权网易云社区发布. 背景 在组件化不断深入的大环境下,无论使用哪种 MDV 框架都最终会遇到一个头疼的问题,就是「跨组件通信」. 下图是个简单的例子 这里包含「事件通信」和「数据通信 ...
- react的组件通信
react的组件通信 1.父组件传子组件 import React, {Component} from 'react'class Father extends Component{ render() ...
- React中组件通信的几种方式
https://segmentfault.com/a/1190000012361461 需要组件之进行通信的几种情况 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 ...
- React之组件通信
组件通信无外乎,下面这三种父子组件,子父组件,平行组件(也叫兄弟组件)间的数据传输.下面我们来分别说一下: 父子组件: var Demo=React.createClass({ getInitialS ...
- Context - React跨组件访问数据的利器
Context提供了一种跨组件访问数据的方法.它无需在组件树间逐层传递属性,也可以方便的访问其他组件的数据 在经典的React应用中,数据是父组件通过props向子组件传递的.但是在某些特定场合,有些 ...
- 5.React中组件通信问题
1.父组件传递值给子组件 想必这种大家都是知道的吧!都想到了用我们react中的props,那么我在这简单的写了小demo,请看父组件 class Parent extends Component{ ...
- vue跨组件通信的几种方法
http://www.tuicool.com/articles/jyM32mA 在开发组件的时候,一定会遇到组件的通信,比如点击一个图标出现弹窗和蒙层,这三个分别是不同的组件.管理他们之间的状态就成了 ...
- react 父子组件通信
import React from 'react'; import B from './B'; class A extends React.Component{ state = { msg:'我来自于 ...
- react之组建通信
父组件与子组件通信 父组件将自己的状态传递给子组件,子组件当做属性来接收,当父组件更改自己状态的时候,子组件接收到的属性就会发生改变 父组件利用ref对子组件做标记,通过调用子组件的方法以更改子组件的 ...
随机推荐
- super()和super(props)
一.ES6类 在ES6中,通过extends关键字实现类的继承,方式如下: class sup { constructor(name) { this.name = name } printName() ...
- 简述Linux磁盘IO
1.什么是磁盘 在讲解磁盘IO前,先简单说下什么是磁盘.磁盘是可以持久化存储的设备,根据存储介质的不同,常见磁盘可以分为两类:机械磁盘和固态磁盘. 1.1 机械磁盘 第一类,机械磁盘,也称为硬盘驱动器 ...
- 第四課-Channel Study File Reader & File Writer
示例描述:从数据库中读取数据并过滤转换为HL7并存放到指定目录;然后读取目录中的HL7文件转换为txt文本并存放到指定目录. 首先在F:\MirthConnect\Test目录下创建Out目录存放输出 ...
- 千万级可观测数据采集器--iLogtail代码完整开源
简介: 2022年6月29日,阿里云iLogtail开源后迎来首次重大更新,正式发布完整功能的iLogtail社区版.本次更新开源全部C++核心代码,该版本在内核能力上首次对齐企业版,开发者可以构建出 ...
- EventBridge 特性介绍|以 IaC 的方式使用 EventBridge
简介:本文将重点介绍 EventBridge 和 IaC 的重点概念和特性,然后演示如何应用 IaC 理念自动化部署 EventBridge 来使用这些概念和特性. 作者:王川(弗丁) 引言 Eve ...
- 全链路灰度之 RocketMQ 灰度
简介:本文将以上次介绍过的<如何用 20 分钟就能获得同款企业级全链路灰度能力?>中的场景为基础,来进一步介绍消息场景的全链路灰度. 作者:亦盏 之前的系列文章中,我们已经通过全链路金丝 ...
- WPF 使用 VisualBrush 在 4k 加 200 DPI 设备上某些文本不渲染看不见问题
这是我做一个十万点实时刷新的图表控件遇到的问题,做过高性能图表的伙伴大概都知道,此时需要关闭命中测试的功能,无论是控件的还是 Drawing 的,否则计算命中测试的耗时将会让主线程卡住.为了解决此问题 ...
- docker、docker-compose 常用命令
1.docker 常用命令 创建容器:docker create 启动容器:docker start [id] 停止容器:docker stop [id] 停止全部运行的容器:docker stop ...
- 04.2 go-admin前后端打包为一个服务上线
目录 一.思路: 二.打包go-admin-ui为静态文件 a.修改配置文件 b.打包 c.复制dist到go-admin的static目录里 三.配置go-admin a.配置路由 b.访问页面 视 ...
- gin-vue-admin 03 项目打包上线
目录 作者视频 思路 环境要求 1. 配置nginx 2.打包前台vue代码 3.打包后台go代码 4. 上传代码到服务器 5. 后台运行power 6. 访问后台 开发场景: 1. nginx 配置 ...