react组件之间的通讯

作者: stois | 来源:发表于2016-08-22 12:00 被阅读166次

背景故事很简单:
父组件对子组件传递信息,直接使用props即可;
子组建对父组件传递信息,参考自React 组件之间如何交流,让子组件触发

this.props.callbackParent(newState);

父组件进行对应的设置:

 onChildChanged: function (newState) { 
    this.setState({ checked: newState }); 
},

并在render加入:

<ToggleButton text="Toggle me" 
initialChecked={this.state.checked} 
callbackParent={this.onChildChanged}
 />

这里ToggleButton就是对应的子组件,看起来流程有些复杂。

那么独立组件之间呢?据说flux可以解决这样的问题,于是发现flux傻瓜教程,提到:
<blockquote>
如果你的应用需要处理动态的数据,那很可能需要使用 Flux。
如果只是一些静态的视图,它们之间不共享状态,你也没什么数据保存或者更新,就不需要使用 Flux,用了也没什么好处。
</blockquote>
当然flux的单向数据流处理机制可以解决独立组件的通信,但我的通讯需求没那么多,并且把当前代码全部改写为适用于flux的代码也挺烦人的。有没有轻量的办法?有一个工具,叫做js-signals
样例十分明朗:

//custom object that dispatch a `started` signal
var myObject = {
  started : new signals.Signal()
};
function onStarted(param1, param2){
  alert(param1 + param2);
}
myObject.started.add(onStarted); //add listener
myObject.started.dispatch('foo', 'bar'); //dispatch signal passing custom parameters
myObject.started.remove(onStarted); //remove a single listener

对于两个独立组件,使用它的思路是:

  1. 建立一个全局组件,其中引入signals所需,并让两个组件都分别引入这个全局组件:
import Signals  from  'signals';
var Global = {
         broadData: new Signals.Signal(), //全局数据广播对象
         datas : {}  //总数据对象
};
module.exports = Global;
  1. 发送方在自己的某个事件中,先设置好要传递的数据,然后调用dispatch:
 this.preValue = e.target.value ;
 Global.datas.curValue=this.preValue; //将curValue放入总数居对象
 Global.broadData.dispatch( Global.datas); //发布数据
  1. 接收方注册一个响应事件即可:
 getPer(){
                var that=this;
                console.log(Global.datas);
                Global.broadData.add(function(data){ //收听到数据
                console.log('data'+data);
                   that.setState({
                      endValue:data.curValue,
                   });
                });
                
            }   

这里需要特别注意的是,该事件注册一次就好了。我写在了constructor里,其他合适的时机下也没有问题:

 constructor(props) {
    super(props);
    this.state = {
      endValue: 0 ,
    };

   this.getPer();
  }

你通过代码已经注意到,如果有多个接收方,都是先照单全收,然后根据发来的数据其中的属性“归不归自己管”来进行处理。这当然不是最好的办法,但轻度使用还是足够。更多独自组件的通讯方法请参见React 组件之间如何交流

相关文章

  • React组件之间的通讯

    在 React 中,UI 以组件的形式来搭建,组件之间可以嵌套组合。另,React 中组件间通信的数据流是单向的,...

  • react组件之间的通讯

    背景故事很简单:父组件对子组件传递信息,直接使用props即可;子组建对父组件传递信息,参考自React 组件之间...

  • 【react】父子组件之间通讯props

    实现父子组件双向数据流整体的思路是: 1,父组件可以向子组件传递props,props中带有初始化子组件的数据,还...

  • react组件通信

    react组件通信是一个常用功能,在做react项目中经常遇到 React组件层级关系 在了解Reat组件通讯之前...

  • react组件之间的通信

    今天来看一下react组件之间是怎么进行通讯的。react推崇的是单向数据流,自上而下进行数据的传递,但是由下而上...

  • react父子通讯

    父子通讯父传数据给子,子传数据给父 react组件class 组件名 extends React.Componen...

  • vue页面和component组件之间双向通讯(续1)

    VUE中父组件、子组件之间的双向通讯可以参见笔者的《vue页面和component组件之间双向通讯[https:/...

  • react组件间通信

    处理 React 组件之间的交流方式,主要取决于组件之间的关系,然而这些关系的约定人就是你。 React 组件之间...

  • react子组件向父组件传值

    相关资料:react 父组件怎么获取子组件的这个值React组件间信息传递方式react同级组件之间传值 • 父...

  • react 问题 更新。。。。

    刚接触react 还不太熟,碰到了一些问题,记录下 子组件与父组件之间的通讯: 在网站设计中,网站头部可以共用,所...

网友评论

    本文标题:react组件之间的通讯

    本文链接:https://www.haomeiwen.com/subject/efowsttx.html