React 组件间通信
https://jsfiddle.net/69z2wepo/9719/
<script src="https://facebook.github.io/react/js/jsfiddle-integration.js"></script> <div id="container">
<!-- This element's contents will be replaced with your component. -->
</div>
<hr/>
<div id="container1">
<!-- This element's contents will be replaced with your component. -->
</div> <hr/>
<!--在容器页面中操作Foo的方法-->
<div onclick="clickSpan()" style="border:#CCCCCC 1px solid">click me to change Foo's age to 20 from container page</div>
var Foo=React.createClass({
//setGender是部件Foo向外公开的一个方法,用于操作Foo的gender值
setAge:function(age){
var stateVal={};
if(age>20)
{
stateVal={gender:'male',age:age}
}
else
{
stateVal={gender:'femle',age:age}
}
this.setState(stateVal);
},
getInitialState:function(){
return {
age:0,
gender:'female'
}
},
render:function(){
return <div>
<div>
<strong>{this.props.componentName}</strong>
</div>
<div>
gender:<input value={this.state.gender} type="text" ref="txt" />
</div>
<div>
age:{this.state.age}
</div>
</div>
}
});
var Bar = React.createClass({
onAgeChange:null,
render: function() {
return <div>
<div onClick={this.helloClick}>
<strong>{this.props.componentName}</strong>(click me to show age value)
</div>
<div>
age:<input onChange={this.onChange} type="text" ref="age" />
</div>
<div>
age:{this.state.age}
</div>
</div>;
},
helloClick:function(){
alert(this.refs.age.getDOMNode().value);
},
onChange:function(e){
if(this.onAgeChange) this.onAgeChange(e.target.value);
this.state.age=e.target.value;
this.setState({age: e.target.value});
//this.forceUpdate();
},
getInitialState:function(){
return {
age:0
}
},
componentDidMount:function(){
this.refs.age.getDOMNode().value=this.state.age;
}
});
var foo=React.render(<Foo componentName="Foo"/>, document.getElementById('container'));
var bar=React.render(<Bar componentName="Bar" />, document.getElementById('container1'));
bar.onAgeChange=function(age){
foo.setAge(age);
}
function clickSpan(){
// 在容器页面中操作Foo的方法
foo.setAge(22);
}
参考
Thinking in React
https://facebook.github.io/react/docs/thinking-in-react.html
React 组件间通信的更多相关文章
- React 组件间通信介绍
React 组件间通信方式简介 React 组件间通信主要分为以下四种情况: 父组件向子组件通信 子组件向父组件通信 跨级组件之间通信 非嵌套组件间通信 下面对这四种情况分别进行介绍: 父组件向子 ...
- vue 和 react 组件间通信方法对比
vue 和 react 组件间通信方法对比: 通信路径 vue的方法 react的方法 父组件 => 子组件 props(推荐).slot(推荐).this.$refs.this.$childr ...
- React组件间通信-sub/pub机制
React生命周期第二个demo演示了兄弟组件的通信,需要通过父组件,比较麻烦:下面介绍sub/pub机制来事项组件间通信. 1.导包 npm i pubsub-js 2.UserSearch.jsx ...
- React 组件间通信 总结
组件间通信 5.1.1. 方式一: 通过props传递 1) 共同的数据放在父组件上, 特有的数据放在自己组件内部(state) 2) 通过props可以传递一般数据和 ...
- React组件间通信
众所周知,ReactJS组件与组件之间的通信是一个难点.在React实际开发中,父子组件之间的传值是比较常见的,刚入门的小伙伴很容易被组件之间的通信绕懵. 今天花了点时间总结了一下React父子组件之 ...
- react 组件间通信,父子间通信
一.父组件传值给子组件 父组件向下传值是使用了props属性,在父组件定义的子组件上定义传给子组件的名字和值,然后在子组件通过this.props.xxx调用就可以了. 二.子组件传值给父组件 子组件 ...
- React独立组件间通信联动
React是现在主流的高效的前端框架,其官方文档 http://reactjs.cn/react/docs/getting-started.html 在介绍组件间通信时只给出了父子组件间通信的方法,而 ...
- React 精要面试题讲解(二) 组件间通信详解
单向数据流与组件间通信 上文我们已经讲述过,react 单向数据流的原理和简单模拟实现.结合上文中的代码,我们来进行这节面试题的讲解: react中的组件间通信. 那么,首先我们把看上文中的原生js代 ...
- [转] React 中组件间通信的几种方式
在使用 React 的过程中,不可避免的需要组件间进行消息传递(通信),组件间通信大体有下面几种情况: 父组件向子组件通信 子组件向父组件通信 跨级组件之间通信 非嵌套组件间通信 下面依次说下这几种通 ...
随机推荐
- 学习EChart.js(四) 移动端显示
ECharts.js 移动端显示 现在很多时候,我们是在用手机.pad等一些移动端设备来进行办公获取数据.所以我们的图表很多时候是需要用移动端设置来查看的,而我们的图表有时候因为数据的偏多,会出现遮挡 ...
- C++ —— 小操作
判断一个浮点数是否是整数: #include <iostream> using namespace std; int main() { ); if (l == (int)l) { //.. ...
- 淡说Linux 的发展史
♦ 1 Linux的简单介绍 Linux与Windows一样都是一套OS(操作系统),Windows界面美观 ,普通用户很容易上手,点点鼠标就能搞定许多操作,而Linux生下来就是为程序员的,故精通 ...
- [Python 多线程] GIL全局解释器锁 (十三)
Queue 标准库queue模块,提供FIFO(先进先出)的Queue.LIFO(后进先出)的队列.优先队列. Queue类是线程安全的,适用于多线程间安全的交换数据.内部使用了Lock和Condit ...
- virtualbox+vagrant学习-2(command cli)-1-vagrant box命令
vagrant box 这是用于管理(添加.删除等)boxes的命令. box 是一个打包好的操作系统,是一个后缀名为 .box 的文件,其实是一个压缩包,里面包含了 Vagrant 的配置信息和 V ...
- 关于CUDA5之后cutil.h不可用的问题
用CUDA进行GPU加速开发的同学在移植一些代码片段时应该都有过这样的经历,如果自己用的是高版本的CUDA,系统有时会报错:CANNOT FIND CUTIL.H.查看代码才发现原来是多了CUTIL. ...
- CS20Chapter3
waiting P54 shuffle data 03_Lecture note_Linear and Logistic Regression 学习点1: python的地址输入是要不能用正斜杠\的 ...
- Maven Jetty插件使用
本机环境 JDK8 Maven 3.5 Jetty 9.3 Eclipse Mars pom.xml配置 在你的 pom.xml 文件中添加 jetty 插件的描述信息 <build> & ...
- uva 10369 Arctic Network (最小生成树加丁点变形)
The Department of National Defence(DND)wishestoconnectseveral northern outposts by a wireless networ ...
- CentOS7安装mysql兼容性问题
Linux上安装MySQL时出现不兼容的解决办法: [root@localhost ~]# rpm -ivh MySQL-server-5.5.24-1.linux2.6.x86_64.rpm Pre ...