簡體   English   中英

為什么getDerivedStateFromProps是靜態方法?

[英]Why is getDerivedStateFromProps is a static method?

我還沒有處理靜態getDerivedStateFromProps,所以我試圖了解它。

我理解React通過引入一個名為static getDerivedStateFromProps()的新生命周期方法,在React v16 +中棄用了componentWillReceiveProps。 好的,但想知道為什么React已經改為靜態方法而不是普通方法。

為什么

   static getDerivedStateFromProps(nextProps, prevState){

   }

為什么不

   getDerivedStateFromProps(nextProps, prevState){

   }

我無法理解為什么它是靜態方法。

根據本提案的描述:

此提議旨在降低編寫異步兼容的React組件的風險。

它通過刪除當前API中潛在陷阱的許多<sup>1</sup>同時保留API啟用的重要功能來實現此目的。 我相信這可以通過以下方式實現:

  1. 選擇具有更清晰,更有限目的的生命周期方法名稱。

  2. 使某些生命周期靜態以防止實例屬性的不安全訪問。

在這里

使用靜態方法替換容易出錯的呈現階段生命周期鈎子, 以便更容易編寫異步兼容的React組件。

最后,經過大量討論, 這里還正式描述了使用靜態方法的目標:

此提議的目標是降低編寫異步兼容的React組件的風險。 我相信這可以通過刪除當前API中的許多潛在缺陷來實現,同時保留API支持的重要功能。 這可以通過以下組合來完成:

  1. 選擇具有更清晰,更有限目的的生命周期方法名稱。

  2. 使某些生命周期靜態以防止實例屬性的不安全訪問。

無法檢測或防止所有副作用(例如全局/共享對象的突變)。

您不應該觸摸該方法中的任何內部數據,因此它被定義為靜態。 通過這種方式,您無法觸摸任何物體,您可以做的唯一事情就是使用提供的先前狀態和下一個道具來做您正在做的任何事情。

getDerivedStateFromProps是一個新的API,它是為了在作為特性的異步渲染發布時可以擴展而引入的。 根據Dan Abramov in a tweet

選擇該方法是靜態的,以幫助確保純度,這是重要的,因為它在可中斷階段期間發生火災。

想法在渲染方法之后移動所有不穩定的東西和副作用。 在可中斷階段訪問組件實例變量可能會導致人們使用它時會產生各種副作用,從而導致異步呈現不一致

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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