react组件通信那些事儿
父组件是调用组件的组件。
现在看来,感觉父组件就是一个壳子,定义好壳子里面会有什么,而子组件是一个具体的实现,说明,会用到什么东西,如果有这些东西,会进行什么操作。总之,父组件是材料,有水和泥,子组件告诉你,怎么制作水泥。
父组件给子组件输入什么,子组件就是什么。不同的父组件调用,或许可以呈现不同的输出,前提是在子组件里面要定义不同的接口,属性方法,供不同的父组件使用。
class Parent extends React.Component { state = { msg: 'start' }; componentDidMount() { setTimeout(() => { this.setState({ msg: 'end' }); }, 1000); } render() { return <Child_1 msg={this.state.msg} />; } } class Child_1 extends React.Component { render() { return <p>{this.props.msg}</p>; } }
class Parent extends React.Component { state = { msg: 'start' }; fMsg(msg) { this.setState({ msg }); } render() { return ( <div> <p>child msg: {this.state.msg}</p> <Child_1 transferMsg={msg => this.fMsg(msg)} /> </div> ); } } class Child_1 extends React.Component { componentDidMount() { setTimeout(() => { this.props.transferMsg('end'); }, 1000); } render() { return ( <div> <p>child_1 component</p> </div> ); } }
class Parent extends React.Component { state = { msg: 'start' }; fMsg(msg) { this.setState({ msg }); } componentDidUpdate() { console.log('Parent update'); } render() { return ( <div> <Child_1 transferMsg={msg => this.fMsg(msg)} /> <Child_2 msg={this.state.msg} /> </div> ); } } class Child_1 extends React.Component { componentDidMount() { setTimeout(() => { this.props.transferMsg('end'); }, 1000); } componentDidUpdate() { console.log('Child_1 update'); } render() { return ( <div> <p>child_1 component</p> </div> ) } } class Child_2 extends React.Component { componentDidUpdate() { console.log('Child_2 update'); } render() { return ( <div> <p>child_2 component: {this.props.msg}</p> </div> ) } }
import eventProxy from '../eventProxy'; class Parent extends React.Component { render() { return ( <div> <Child_1 /> <Child_2 /> </div> ); } } class Child_1 extends React.Component { componentDidMount() { setTimeout(() => { // 发布者,发布msg事件 eventProxy.trigger('msg', 'end'); }, 1000); } } class Child_2 extends React.Component { state = { msg: 'start' }; componentDidMount() { // 订阅者,监听msg事件 eventProxy.on('msg', (msg) => { this.setState({ msg }); }); } render() { return ( <div> <p>child_2 component: {this.state.msg}</p> </div> ) } }
// 通过...运算符向Child_1_1传递Parent组件的信息 class Child_1 extends React.Component { render() { return ( <div> <p>{this.props.msg}</p> <Child_1_1 {...this.props} /> </div> ) } } class Child_1_1 extends React.Component { render() { return <p>{this.props.msg}</p>; } }
class Parent extends React.Component { getChildContext() { return { color: 'red', cbFun: this.fCallback.bind(this) }; } fCallback(msg) { console.log(msg); } render() { return <Child_1 />; } } Parent.childContextTypes = { color: PropTypes.string, cbFun: PropTypes.func } class Child_1 extends React.Component { render() { return <Child_1_1 />; } } class Child_1_1 extends React.Component { static contextTypes = { color: PropTypes.string, cbFun: PropTypes.func } render() { const styles = { color: this.context.color }; const cb = (msg) => { return () => { this.context.cbFun(msg); } } return ( <button style={styles} onClick={cb('子组件向父组件传数据。')}>点击</button> ) } }
class Parent extends React.Component { constructor(props) { super(props); this.state = { color: "red" } } getChildContext() { return { color: this.state.color, cbFun: this.fCallback.bind(this) }; } fCallback(color) { this.setState({color}); } render() { return <Child_1 />; } } Parent.childContextTypes = { color: PropTypes.string, cbFun: PropTypes.func } class Child_1 extends React.Component { render() { return <Child_1_1 />; } } class Child_1_1 extends React.Component { static contextTypes = { color: PropTypes.string, cbFun: PropTypes.func } render() { const styles = { color: this.context.color }; const cb = (msg) => { return () => { this.context.cbFun(msg); } } return ( <button style={styles} onClick={cb('blue')}>点击</button> ) } }
react组件通信那些事儿的更多相关文章
- react第六单元(react组件通信-父子组件通信-子父组件通信-跨级组件的传参方式-context方式的传参)
第六单元(react组件通信-父子组件通信-子父组件通信-跨级组件的传参方式-context方式的传参) #课程目标 1.梳理react组件之间的关系 2.掌握父子传值的方法 3.掌握子父传值的方法 ...
- 21.react 组件通信
状态属性可以修改 this.setState()中可以写对象,也可以写方法 <script type="text/babel"> class Test extends ...
- React/组件通信
组件通信可以分为以下几种: 父组件向子组件通信 子组件向父组件通信 跨级组件的通信及context 没有嵌套关系的组件通信 父组件向子组件通信 父组件通过props向子组件传递需要的信息. 子 ...
- vue组件通信那些事儿
一.说说通信 通信,简言之,交流信息.交流结束后,把信息放在哪里,这是一个值得思考的问题.vue中保存状态有2种方式,组件内的data属性和组件外的vuex的state属性. 1.用state的场景 ...
- React组件通信技巧
效果图 communication.gif 点击查看Github完整源码 1.父向子通信 直接标签中插入参数即可 //number只是个例子 let _number = this.state.numb ...
- React组件通信
1.父子通信 父 -> 子 props子 -> 父 回调函数,父组件通过props向子组件传递一个函数,子组件调用函数,父组件在回调函数中用setState改变自身状态 2.跨层级通信 1 ...
- 使用reflux进行react组件之间的通信
前言 组件之间为什么要通信?因为有依赖. 那么,作为React组件,怎么通信? React官网说, 进行 父-子 通信,可以直接pass props. 进行 子-父 通信,往父组件传给子组件的函数注入 ...
- React之组件通信
组件通信无外乎,下面这三种父子组件,子父组件,平行组件(也叫兄弟组件)间的数据传输.下面我们来分别说一下: 父子组件: var Demo=React.createClass({ getInitialS ...
- 【JAVASCRIPT】React学习- 数据流(组件通信)
摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 一 组件通信如何实现 父子组件之间不存在继承关系 1.1 父=>子通信 父组件可以通过 this.refs.xx ...
随机推荐
- kali linux 更新问题
1.使用一次更新和升级软件替换 apt-get install && apt -y full -upgrade 之后使用 reboot重启 系统,重启之后 再次使用命令 ap ...
- hdu4044 依赖背包变形 好题!
由于不是求最大的可拦截的HP值,而是要将最小值最大化,那么就需要分配每个子树用的钱数以达到最小值最大化 第一步解决如何分配钱使得结点u的子树中用了j元钱后可以拦截的HP最大,这就是变形的分组(依赖)背 ...
- Django的Session存储Redis环境配置
第一步:在项目目录下的settings.py中MIDDLEWARE中加上中间件: # session中间件Django项目默认启用Session 'django.contrib.sessions.mi ...
- Chrome开发者控制台操作教程
1清空控制台 在控制台下有个clear console的按钮,点击的时候会清空控制台. 清空控制台 2让Chrome中的页面可编辑 有的时候我们需要临时改变页面上的文字,图案等信息,一种常见的方法是 ...
- BZOJ 2818 Gcd(欧拉函数+质数筛选)
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 9108 Solved: 4066 [Submit][Status][Discu ...
- UPC 6616 Small Mulitple
D - Small Multiple 题目传送门 Time limit : 2sec / Memory limit : 256MB Score : 700 points Problem Stateme ...
- 实战--Keepalived和LVS实现负载高可用
显然,只有上一篇的操作,在WEB运维技术中,只能承担一半的角色. 想像一下,如何LVS本身倒了,肿么办?后端的NGINX再多,也只能是干着急,请求过来不呀! 所以,在本篇时,我们来实现LVS永不倒, ...
- 统计各个数据库的各个数据表的总数,然后写入到excel中
1.最近项目基本进入最后阶段了,然后会统计一下各个数据库的各个数据表的数据量,开始使用的报表工具,report-designer,开源的,研究了两天,发现并不是很好使,最后自己下班回去,晚上思考,想着 ...
- [warn] 7#7: *676 a client request body is buffered to a temporary file /var/cache/nginx/client_temp/0000000007
nginx 上传文件遇到的Bug. fastcgi_buffer_size 128k; fastcgi_buffers 8 128k; fastcgi_busy_buffers_size 128k; ...
- [转] 使用babel-plugin-react-css-modules简化CSS Modules的使用
在我们的产品中,均使用CSS Modules来作为样式解决方案,大致的代码是这样的: import React from 'react'; import styles from './table.cs ...