簡體   English   中英

React 16.X 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM