我有兩個兄弟組件RegionsDropdownComponent
和CitiesDropdownComponent
在一個容器內UpdateProfileFormComponent
。如何確定render()是由顯式setState()調用還是由父組件傳遞道具來調用?
在開始時,UpdateProfileFormComponent
擁有配置文件數據(已從服務器預取);配置文件的區域作爲道具傳遞到RegionDropdownComponent
,而區域和城市都傳遞到CitiesDropdownComponent
。
在CitiesDropdownComponent
範圍內,區域用於過濾城市下拉列表,使下拉列表僅反映屬於地區的城市,城市則用於設置城市輸入字段。 在CitiesDropdownComponent
的render()
方法中,使用其props.region
和props.city
。
更重要的是,當用戶從RegionsDropdownComponent
不同的選項,然後在父UpdateProfileFormComponent
一個handleChange()
會叫this.setState()
使UpdateProfileFormComponent
會通過選擇區域和空字符串道具CitiesDropdownComponent
,然後再過濾的城市下拉列表中,還可以設置城市輸入爲空。
到目前爲止這麼好。
現在還有一個第三兄弟AgenciesDropdownComponent
,它獨立於但類似於CitiesDropdownComponent
,因爲它取決於RegionsDropdownComponent
過濾機構下拉列表並設置/重置機構輸入字段。 回到CitiesDropdownComponent
,當用戶選擇從城市下拉菜單不同的選項,我想在一個CitiesDropdownComponent
方法handleChange()
將調用this.setState({city:selected_option_value})
...但隨後的CitiesDropdownComponent
render()
已經使用props
而不是this.state
。
我該如何嘗試協調這兩個相沖突的要求?
'render()'不應該知道這一點。 –
如果調用componentWillRecieveProps(),則由於父項傳遞道具而發生渲染。 setState不會調用此生命週期方法 –