在React中,数据都大体上都是单向数据流动的,由父节点传到子节点,子组件都是通过Props从父组件那里获取数据,这样的话,如果很多子组件用了数据只需要改变父组件的数据子组件的数据都会发生改变react就会递归重新渲染整个组建。这样子组件就简单而且易于把握了。
大部分数据都是父传子,就不详写了。 但是偶尔向日期组件,input,select组件,等等子组件,父组件都是需要通过子组件传来的数据进行判断的。这个时候就需要逆向传递数据了。
解决问题的方法
1.在工作中就直接由父组件向子组件传递(带参)函数
2.当需要在子组件里面进行值的变化传递给父组件的时候,把需要传递的值(json,数组都能传 等等)作为入参给函数。
例如:
父组件里面
onInput(tag, e) {
Console.Log(tag); //获取子组件传过来的第一组值 (因为可以转json,Array传的数据不少所以我用组形容)
Console.Log(e); //获取子组件穿过来的第二组值
}
<InputComponent callback={this.onInput.bind(this)} }/> //在render里面调用这个
子组件里面
this.props.callback(this.props.tag, val); //通过props调用父组件的函数,然后通过这个实参去给父组件传递值
初期编码的一些交互并不复杂,React的单向数据流有优点也同时有缺点。 后续的父子组件之间的数据传递更为复杂,或者说子组件与子组件之间的数据流动这都会导致这种方式仅仅能解决一些简单的数据流。
我在做微信支付服务商物料管理的时候涉及保存页面的数值状态,在跳转页面的同时要保存当前的数据。这种用react虽然也能实现。但每次保存状态的方式都非常的不优雅。 后面看了Flux思想,确实能解决数据比较复杂的情况,而redux框架是其中的佼佼者。(Facebook Flux其中store和Dispatcher和action之间存在多对多,并且以广播的形式进行传递信息,不优雅。 reflux比较好用采用了监听的方式比较不错)如果感兴趣可以看看相关的博客进行了解。