2017-06-29 28 views
1

從這個問題的答案是有道理的:If the props for a child component are unchanged, does React still re-render it?,我也做了一個CodePen來驗證它。爲什麼React如果其道具保持不變,會重投小孩?

shouldComponentUpdate(nextProps, nextState) { 
    console.log(nextProps.test === this.props.test); 
    console.log('shouldComponentUpdate'); 
    return true; 
} 

但在陣營的網站一個說法是:

shouldComponentUpdate()是正在接收新道具或狀態時,呈現之前調用。

但實際上,即使子組件的道具和狀態保持不變,shouldComponentUpdate()仍然會被調用。官方聲明中是否存在一些錯誤,或者我誤解了它?

回答

0

由於父組件Clock正在每秒重新渲染,所以Child組件也會被重新渲染。這是因爲Clock在狀態更新發生時會完全恢復,因爲時鐘向前移動了一秒鐘。因此,由於ChildClock的一部分,因此它也被重新提交。

從陣營文檔的報價是正確的:

shouldComponentUpdate()正在接收新道具或狀態時,呈現之前被調用。

每當Child被重新描繪,道具test一次又一次之後每一秒Clock被重新描繪接收。這就是'新的道具或狀態'在這裏提到的,不一定是它變得不同,獨特的道具。因此,每次Child被重新調用時都調用shouldComponentUpdate,因爲在每次重新提交時,支持test被給予Child

+0

謝謝!我誤解爲'新的道具或狀態'。我曾經假設'新更新的道具或狀態'。 XD – Zhichao

0

這可能是一條評論,但我還沒有足夠的聲望來建立評論。你一定要檢查React.PureComponent,因爲這可以防止改變不改變道具的元素。

相關問題