2016-09-16 48 views
2

假設我有一個組件呈現children,但這些孩子可以是連接或基於計時器的更新組件。父組件不知道這一點。然而,父組件實現shouldComponentUpdate進行性能優化。DoesComponentUpdate是否阻止連接的孩子更新

class Container extends React.Component { 
    shouldComponentUpdate(nextProps, nextState) { return shallowCompare(this, nextProps, nextState) } 

    render() { 
    return <div> 
     <h1>{this.props.title}</h1> 
     { children } 
    </div> 
    } 
} 

比方說,Clock是一個自更新/連接部件。而在這個星座:

<Container title="Current Time"> 
    <Clock/> 
</Container> 

Clock時,它的屬性變化,由於redux狀態變化或內部超時(但它的實現),儘管它的父組件title永遠不會改變,因此componentShouldUpdate調用返回false依然會得到更新?

回答

4

如果ClockContainer接收道具和Container不更新,因爲shouldComponentUpdate,然後Clock將不會更新。如果它連接到商店,那麼它應該更新,因爲它會直接收到道具。

+0

如果時鐘使用定時器和本地組件狀態更新? – philk

+2

https://codepen.io/anon/pen/YGWVXv – Benjamin

+0

'shouldComponentUpdate'只會使用'shouldComponentUpdate'在塊級別上呈現更改。如果孩子期望使用'shouldComponentUpdate'從父母更新道具並且沒有更新,則孩​​子不會更新。如果有兒童特別處理的狀態變化(或從'connect'傳送的道具),那麼這些變化是分開的。 – Benjamin