在用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