[英]React - Are all state properties required to be returned by getDerivedStateFromProps?
[英]React 16.X getderivedstatefromprops returned new state .Is possible to change that same state inside component again?
我正在使用getderivedstatefromprops
方法查找是否發生任何道具更改。 如果發生返回新的狀態集,並且我正在處理componentDidupdate方法,但是無法在組件的onChange
方法中更改同一狀態。 下面是我的代碼。
在我的構造函數中,我添加了一個額外的狀態變量來存儲我的prevProps
數據。 稍后,我可以在getDerivedStateFromProps
使用此狀態。
建設者
this.state ={ errorPrevProps : this.props.error_response }
getDerivedStateFromProps
static getDerivedStateFromProps( nextProps , prevState){
if(nextProps.error_response !== prevState.errorPrevProps){
return { 'error' : nextProps.error_response , errorPrevProps: nextProps.error_response }
}
return null;
}
因此,我正在errorPrevProps
內創建新的狀態errorPrevProps
,如果發生任何更新以避免這種方法執行的情況,這將在getDerivedStateFromProps
提供幫助。
新方案來如果我從服務器獲取相同的錯誤消息再次該condtion失敗,因為errorPrevProps和nextProps.error_response具有相同的錯誤消息。 但是我應該在UI中填充它。
這樣糾正
當ajax
方法在該方法中觸發時,我會手動將errorPrevProps
的狀態(不僅是此狀態,我用於存儲prevProps數據的所有狀態)都將為empty string
例如''
然后如果任何道具再次更改此getderivedstatefromprops
返回響應將執行該操作,此時prevProps狀態的值( errorPrevProps
)為空字符串,因為**我已在ajax方法中手動設置**。 在getderivedstatefromprops
方法內部,現在new Props
具有相同的錯誤消息,但是我的prevProps
具有''
所以條件為真,它將更新新的props值的錯誤狀態。
那是正確的方法嗎? 。 因為我使用的是redux
,所以每次返回一個對象時,它都會響應服務器端的數據或錯誤消息。
每次更新時都會調用getDerivedStateFromProps
,不僅會更改道具,因此即使在setState時getDerivedStateFromProps
觸發getDerivedStateFromProps
,並將您的狀態重置為從道具收到的任何內容。 您應該改為保持prevProps
的狀態,並在getDerivedStateFromProps
更新狀態,例如
static getDerivedStateFromProps( props , state){
if(props.error_response !== state.prevError)
{
return { 'error' : props.error_response, prevError: props.error_response }
}
return null;
}
另外,您可能不需要componentDidUpdate。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.