在用Redux,flux和其他pub/sub方法挣扎太多之后,我用以下技术结束了。我不知道这是否会造成一些大的损害或缺陷,因此将其张贴在此处,以便从有经验的程序员那里了解其优点和缺点。Reactjs组件之间的通信
var thisManager = function(){
var _Manager = [];
return{
getThis : function(key){
return _Manager[key];
},
setThis : function(obj){
_Manager[obj.key] = obj.value;
}
}
};
var _thisManager = new thisManager();
// React Component
class Header extends Component{
constructor(){
super();
_thisManager.setThis({ key: "Header", value:this}
}
someFunction(data){
// call this.setState here with new data.
}
render(){
return <div />
}
}
// Then from any other component living far somewhere you can pass the data to the render function and it works out of the box.
i.e.
class Footer extends Component{
_click(e){
let Header = _thisManager.getThis('Header');
Header.somefunction(" Wow some new data from footer event ");
}
render(){
return(
<div>
<button onClick={this._click.bind(this)}> send data to header and call its render </button>
</div>
);
}
}
我送JSON在我的应用程序中的数据并将其完美呈现所需的成分,我可以调用渲染没有任何的pub/sub或深传承道具来调用父类的方法以改变该.setState导致重新渲染。
到目前为止,该应用程序工作正常,我也爱它的简单了。请扔光这种技术的优点和缺点
问候
编辑:
它是坏的调用渲染,所以我改成了另一种方法来获得这种设置的更多优点和缺点。与此设置
尽管这种方式在一个非常有限的用例(如您提供的示例)中起作用,但会干扰反应组件的生命周期。渲染方法决不是直接调用,也不应该有输入,这使得它不纯。至少,揭露一种不同的公共方法,它接受你发送的任何内容。在该方法中,执行setState将隐式地调用渲染。最后,而不是渲染调用该方法。 – hazardous
谢谢@HazardouS,肯定是正确的,但技术怎么样,基本上我没有公开它是可以调用渲染的引用,我猜setState会做同样的效果加上什么损坏的部分发送数据渲染函数作为参数? –
SO应用程序不是很好的长期解释:)。请阅读React中的纯渲染方法假设。 React批处理渲染,这就是为什么它不应该直接调用。 – hazardous