爲了性能的緣故,我試圖在一些組件上實現shouldComponentUpdate。我們以通常的方式來做 - 有一個不可改變的模型並做參考比較。它的作用大部分,但我一直想知道如果我正確地處理道具的功能。Reactjs shouldComponentUpdate與函數
本質上,我的問題是:在shouldComponentUpdate中,通常在道具中使用函數做什麼?你忽略他們altoghether,或者你試圖比較它們嗎?
下面是一個例子:
var Inner = React.createClass({
shouldComponentUpdate(newProps){
return ???
},
render(){
return <div onClick={this.props.onClick} />;
}
});
var Outer = React.createClass({
getInitialState(){ return {value: 0}; },
render(){
var val = this.state.value;
return <div>
<span>{val}</span>
<Inner onClick={() => { this.setState({value: val + 1}) }} />
</div>
}
});
假設我需要內部成分有shouldComponentUpdate(假設它呈現了很多次,這是很難渲染)。你將如何實現它?我嘗試了以下方法:
1)this.props.onClick === newProps.onClick - 如果您繼續傳遞相同的方法,但它在此示例中不起作用,因爲該方法是內聯創建的。
2)this.props.onClick.toString()=== newProps.onClick.toString() - 如果函數在閉包中沒有任何陳舊的東西 - 這不起作用,因爲val
是在函數的關閉。 3)正如Michael所指出的,你可以忽略shouldComponentUpdate中的函數,其問題與2)一樣。
所有這些方法都可以引入細微的錯誤,是否有更簡單的方法呢?我知道很容易重寫這個例子來工作,但理想情況下,我希望能夠將shouldComponentUpdate行爲提取到儘可能健壯的mixin中,而不是將自身應用於這些問題。
謝謝你的見解。我一定會停止使用道具的內聯函數。 – Michael