React组件通信技巧
效果图
点击查看Github完整源码
1.父向子通信
- 直接标签中插入参数即可
//number只是个例子
let _number = this.state.number
<Child number={_number} />
需要注意,_number 可以为普通参数、this.xxx 参数、也可以是 this.state.xxx 参数,其中this.state.xxx参数若发生改变,会导致 Child 重新渲染
2.子向父通信
- 需要从 Parent 处接一个绑定了父组件的函数,然后在 Child 内部调用修改父的相关参数,达到效果
//从父组件接函数
childToParent() {let _backNumber = this.state.backNumber this.setState({ backNumber: _backNumber + 1 }) } let _childToParent = this.childToParent.bind(this) <Brother childToParent={_childToParent} /> <div>{'子向父通信:' + _backNumber}</div> //子组件触发函数 let _childToParent = this.childToParent.bind(this) <button onClick={_childToParent}>子向父通信</button>
同样,可以修改父组件的 this.state.xxx( this.setState() 触发渲染),也可以修改this.xxx等值
3.通用组件通信方式(包括兄弟组件)
理论上,掌握了子向父通信与父向子通信,可以处理兄弟组件通信,但是如果层级过深,这种方式极度麻烦
建议使用 Event 对象处理嵌套层级过深的组件通信(当然包括兄弟组件通信)
//建议将Event相关单独封装模块使用
//event.js
export var events = {ctc: 'ctc',ctp: 'ctp', ptc: 'ptc', bts: 'bts', stb: 'stb' } export var sendEvent = (eventName, params) => { var event = new Event(eventName) event.params = params document.dispatchEvent(event) } export var catchEvent = (eventName, callback) => { document.addEventListener(eventName, e => callback(e)) } export var removeCatch = (eventName, callback) => { document.removeEventListener(eventName, callback) } //brother.js 发送组件 import {events, sendEvent} from './event' <button onClick={_brotherToSister}>Brother向Sister通信</button> brotherToSister() { let _obj = { message: 'brother to sister' } sendEvent(events.bts, _obj) } //sister.js 接收组件 import {events, catchEvent} from './event' constructor() { super() this.state = { message: '' } //防止多次引用 this._brotherToSister = this.brotherToSister.bind(this) } componentDidMount() { catchEvent(events.bts, this._brotherToSister) //会造成多次引用 // catchEvent(events.bts, this.brotherToSister.bind(this)) } componentWillUnmount() { removeCatch(event.bts, this._brotherToSister) } brotherToSister(e) { this.setState({ message: e.params.message }) } <div> {'message: ' + _message} </div>
点击查看Github完整源码
React组件通信技巧相关推荐
- React组件通信--props
React组件通信 1.props接收数据 //index.js import App from "./App";ReactDOM.render(<App name='传递数 ...
- React组件通信-非父子组件间的通信
文章目录 React非父子组件通信 小知识点的补充 Context应用场景 Context相关API Context使用流程 React非父子组件通信 在React中, 非父子组件传递是通过一个API ...
- React组件通信(父传子,子传父) - 前端
父组件向子组件传值(通过props传值) 子组件: class Children extends Component{constructor(props){super(props);}render() ...
- react组件通信-逆战1913
父组件向子组件通信 父组件: import React,{ Component } from "react"; import Childre from"./Childre ...
- React组件通信传值 父传子 子传父 兄弟组件传值
一.父组件传递子组件 在父组件中引入子组件,将父组件的state值放到子组件标签中传递,在子组件中用this.props.传值名称,接收 父组件代码: import React, { Componen ...
- react 显示隐藏组件的方法_10种React组件之间通信的方法
来源 | https://segmentfault.com/a/1190000023585646 这两天被临时抽调到别的项目组去做一个小项目的迭代.这个项目前端是用React,只是个小型项目所以并没有 ...
- React组件(进阶--生命周期 )
目录 一.生命周期 - 概述 二.生命周期 - 挂载阶段 三.生命周期 - 更新阶段 四.生命周期 - 卸载阶段 文章推荐: 1.JSX基础(入门) 2.React组件(入门) 3.React组件动状 ...
- Vue.js 父子组件通信的十种方式;告诉世界前端也能做 AI;你可能不知道的14个JavaScript调试技巧...
记得点击文章末尾的"阅读原文"查看哟~ 下面先一起看下本周的摘要吧~ 想了解老用户如何参与阿里云双十一1折拼团特惠主机的,可以看第二条推送,文中提供了两种方法~,一起看看本周有哪些 ...
- [react] react组件间的通信有哪些?
[react] react组件间的通信有哪些? Props Context ref:通过Ref获取组建的实例,在通过实例拿到组件的属性值或者方法的回调 第三方的,Redux是基于Conext基础上的库 ...
最新文章
- SQL-Hive中的Select From解析
- 文件/目录权限相关命令:chmod、chown、umask、lsattr/chattr命令解析
- 数据类型_插入数据_选取数据_修改数据——删除行
- 标准C++中的string类的用法总结(转)
- 如何判断一个点是否在三角形内部
- HNCU 1746: 算法4-1,4-3:定位子串
- [css] 能不能使用纯css使你的浏览器卡死?怎么实现?
- 在Delphi中如何创建和使用udl文件
- Python部分知识点
- python网站设计开题报告_网站设计开题报告范文精选5篇
- eval() python_python基础-input函数和eval函数
- listview中getview异步加载网络图片
- SFS2X客户端全部事件详细
- 创建一个带有Lookup字段的List
- jquery富文本编译器_jQuery 移动端artEditor富文本编辑器
- for linux pdf转mobi_在Linux上,如何为Amazon Kindle转换各种电子书格式
- fild与fmul的问题
- 计算机地质制图CAD,计算机辅助地质制图
- VHDL实验二::半加器、一位和四位全加器(绘制原理图)
- 基于iOS 10封装的下载器(支持存储读取、断点续传、后台下载、杀死APP重启后的断点续传等功能)