簡體   English   中英

如果React組件的屬性更新但不改變其價值,它會重新渲染嗎?

[英]Will a React component re-render if its props are updated, but don't change in value?

假設我們有一個redux商店,看起來像這樣:

{
  "page1": {
    "title": "Demo",
    "content": "Testing"
  },
  "page2": {
    "title": "Demo",
    "content": "Yes, I'm aware the titles match."
  }
}

現在讓我們看一下呈現標題的組件:

const Title = ({title}) => <h1>{title}</h1>

const mapStateToProps = state => ({
  title: getCurrentPage().title
})

export default connect(mapStateToProps)(Title)

在上面的塊中,getCurrentPage()是一個記憶化的函數(通過重新選擇),該函數根據某種條件(在這種情況下,它是react-router的location.pathname)從狀態中導出當前頁面數據。

即使{title}的特定值保持不變,當getCurrentPage()返回的數據不同時,此組件是否也會重新渲染?

如果是,則記住派生的標題道具會否定答案?

好的,我花時間測試我自己的問題,因為我收到的第一個答案說它將重新呈現。 我將console.log('render')插入到Title組件中,然后在兩個共享相同確切標題的單獨頁面之間導航。 結果……(鼓聲)

不行 組件未重新渲染。

如果通過調用setState()更改道具或更改本地狀態,或者您顯式調用foceUpdate()函數,則組件將重新渲染。 在您的情況下,標題是一個字符串,並且舊字符串和新字符串具有相同的值,因此,道具沒有任何變化,因此沒有重新渲染。

要注意的一件事是將一個物體傳遞給道具。 react不會做深入的比較,因此結果可能與您的預期有所不同。 在這種情況下,您需要在舊版本的getDerivedStateFromPropscomponentWillRecieveProps中自己比較舊對象和新對象,然后確定是否需要調用forceUpdate()來強制重新渲染組件。

在我的測試中,它沒有使用redux和object,並且我在自己的組件中添加了一個檢查命令,僅在真正更改時才進行更新。

順便說一句,為什么不使用簡單的console.log進行測試?

暫無
暫無

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

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