1.大家都知道父组件给子组件传值!想到了我们react中的props,所以这里简单写了个小demo,请看父组件类ParentextendsComponent{render(){return()}}子组件类ChildextendsComponent{render(){return(
{this.props.text}}}}2.从子组件传值给父组件这里一定要考虑一下!那我写个小demo告诉大家,其实也不难理解。父组件类ParentextendsComponent{constructor(props){super(props);this.state={someKey:'world'};}fn(newState){this.setState({someKey:newState});}render(){return(
);}}子组件类ChildextendsComponent{constructor(props){super(props);this.state={newState:'你好'};}someFn(){this.props.pfn(this.state.newState);//这里是传值给父组件}render(){return(
点击我</div>);}}通过回调函数传值给父组件,并绑定父组件的thisthis.fn.bind(this)3.任何嵌套关系的组件之间传值,它们之间没有关系,并且组件嵌套层次比较深(个人认为2层以上算深),或者你可以订阅一些组件写一些信号,组件之间不想插入组件,这样这两个组件是独立关系对于事件系统,有2个基本操作步骤:订阅/监听一个事件通知,以及发送/触发/发布/派发一个事件通知那些需要的组件。这里有3种处理事件的模式,你可以点击这里进行比较。简要总结:(1)EventEmitter/Target/Dispatcher特性:需要一个指定的feed//到subscribeotherObject.addEventListener('click',function(){alert('click!');});//dispatchthis。dispatchEvent('click');(2)发布/订阅特性:触发事件时,不需要指定具体的来源,因为它使用了一个全局对象来处理事件(实际上是一个全局的广播方法处理事件)//subscribeglobalBroadcaster.subscribe('click',function(){alert('click!');});//dispatchglobalBroadcaster.publish('click');(3)Signals特性:与EventEmitter/Target/Dispatcher类似,只是你不使用随机字符串作为事件触发器的引用。每个触发事件的对象都需要一个确切的名称(即硬编码的类来写事件名称),并且在触发时,还必须指定确切的事件。(看例子,很容易理解)//tosubscribeotherObject.clicked.add(function(){alert('click');});//todispatchthis.clicked.dispatch();处理事件时,需要注意:在componentDidMount事件中,如果组件挂载(mounted),则订阅该事件;当组件被卸载(unmounted)时,取消订阅componentWillUnmount事件中的事件。看完以上,你是不是有什么感悟?比如非父子组件之间通过事件进行通信,如果操作不多,我们可以简单的自己实现如下!下面我简单写了一个,请看subscribe和dispatchlet的简单实现EventEmitter={_events:{},dispatch:function(event,data){if(!this._events[event]){//没有监听事件return;}for(vari=0;iconsole.log(data.name));this.dispatch('namechanged',{name:'John'});现在是不是觉得组件通信其实没有那么难懂了,骚年加油