2016-07-20 35 views
1

我正在學習React。目前試圖瞭解協調過程如何工作。反應:當底層數據結構發生變化時,密鑰是否被重新分配?

我有了這個地圖功能我JSX:

render: function() { 
      var currentIssues = this.state.issues.map(function(issue, i) { 
      return (
       <Issue key={ i } ... </Issue> 
      ); 
      }); 
      return (...) 

我知道應該的關鍵屬性添加到每個子元素。以便React可以可靠地執行update-,delete-和insert-operations。

現在,假設我的數組中有五個問題元素。我刪除了第二個元素。

將渲染函數再次執行嗎?

新訂單將變爲:0,1(前2),2(前3),3(前4)?

或者結構是:0,2,3,4?

+0

如果你正在修改'issues',隨後調用'新VAL setState',然後是的,你會強制一個'render()'。至於'key'的值,它看起來就是你數組的索引('i'),它總是順序的。 – lux

+0

如果您正在添加/刪除數組中的項目,您應該*確實*不會使用索引作爲鍵。如果你有一個,可以使用'issue.id',或者我認爲將整個'issue'對象傳遞給key是可以的,但是我不確定。 –

回答

2

簡而言之,更新列表時,對於列表中的每個項目,React將檢查具有該項目的項目是否已經存在。如果是,它會更新該DOM節點,否則它將刪除DOM節點。因此,將索引作爲關鍵字通常沒有意義。相反,使用該項目的唯一標識符或只傳入整個項目。

它爲每個元素(source)執行的檢查其實很簡單。

運行在所有兒童的實際reconciliation code更復雜一點,但如果你很好奇...

相關問題