<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">组件在开发时经常会相互通信,传递值调用方法等</span>
父级和子级在调用子级组件时绑定就可以了。
还可以绑定父级方法,在子级内调用传递参数。
但有时需要同级组件单通信:
这时就需要借用一些通信库了,如PubSub.js
var a=PubSub.subscribe('product',function(type,value){
type 是设置的类型这里是product value是传递的值<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
}
这是创建一个订阅
PubSub.unsubscribe(a);
删除订阅
PubSub.publish('product', XXX);
调用订阅类型是product
</pre><pre name="code" class="javascript">这样在组件的DidMount方法内创建订阅赋值给this。
可以给函数绑定当前this .bind(this) 内部就可用this.XX来引用当前组件并执行操作如setState等
在销毁组件方法内删除订阅
在其他组件内就可以使用订阅了。
以下是我的实例:
</pre><pre name="code" class="javascript">
var Pro=React.createClass({
render:function(){
return (
<div>
<Pros></Pros>
<Product name="pro1"></Product>
<Product name="pro2"></Product>
<Product name="pro3"></Product>
</div>
)
}
});
var Pros=React.createClass({
getInitialState:function(){
return {
selection:''
}
},
componentDidMount:function(){
this.pubsub=PubSub.subscribe('product',function(topictype,value){
console.log(topictype);
this.setState({
selection:value
});
}.bind(this))
},
componentWillUnmount:function(){
PubSub.unsubscribe(this.pubsub);
},
render:function(){
return (
<p>selection:{this.state.selection}</p>
)
}
});
var Product=React.createClass({
onclick:function(){
PubSub.publish('product', this.props.name);
},
render:function(){
return (
<div onClick={this.onclick}>{this.props.name}</div>
)
}
})
React.render(<Pro></Pro>,document.querySelector('#div2'));