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 的过程中,不可避免的需要组件间进行消息传递(通信),组件间通信大体有下面几种情况: 父组件向子组件通信 子组件向父组件通信 跨级组件之间通信 非嵌套组件间通信 下面依次说下这几种通 ... 
随机推荐
- 提升PHP速度
			PHP的优点之一是速度很快,对于一般的网站应用,可以说是已经足够了.不过如果站点的访问量很高.带宽窄或者其它的因素令服务器产生性能瓶颈的时候,你可能得想想其它的办法来进一步提高PHP的速度了.这篇文章 ... 
- Python3基本数据类型(二、字符串)
			Python3字符串 ①字符串比较 1.比较字符串是否相同: ==:使用==来比较两个字符串内的value值是否相同 is:比较两个字符串的id值. 2.字符串的长度比较 len():显示字符串的长度 ... 
- linux mint sublime3的c编译环境配置
			通过Tools>>Build System>>New Build System弹出新建文件来设置,也可以replace覆盖以前的 一种方式,konsole可以通过sudo ap ... 
- python不用正则过渡括号
- Controller如何写的更简化
			Controller层相当于MVC中的C,也是安卓或者前端请求的接口. 首先说Controller为什么需要写的更加简化? 第一.Controller是不能复用的: 第二.即便是将Controller ... 
- ApiCloud模块链接
			城市选择器 页面左右滑动 识别信用卡 图像coverFlow 输入框 图片浏览器 百度地图 ... 
- matplotlib.pyplot的两种模式
			在交互模式下: 1.plt.plot(x)或plt.imshow(x)是直接出图像,不需要plt.show() 2.如果在脚本中使用ion()命令开启了交互模式,没有使用ioff()关闭的话,则图像会 ... 
- 【luogu P3258 [JLOI2014]松鼠的新家】 题解
			题目链接:https://www.luogu.org/problemnew/show/P3258 谁说树剖过不去会RE呢? 我今天就是要强行树剖了 树剖强艹 #include <cstdio&g ... 
- [LuoguP1360][USACP07MAR]黄金阵容均衡
			[LuoguP1360][USACP07MAR]黄金阵容均衡(Link) 每天会增加一个数\(A\),将\(A\)二进制分解为\(a[i]\),对于每一个\(i\)都增加\(a[i]\),如果一段时间 ... 
- Git--查看,删除,添加远程分支
			1. 查看远程分支: $ git branch -a 2. 删除远程分支: $ git push origin --delete <branch name> 或者 git push --d ... 
