我想知道,如果我不使用動態添加的組件鍵會發生什麼。我刪除了密鑰,它呈現沒有任何問題,只是給出了有關密鑰使用的警告消息。請有人舉例說明如果我們不使用密鑰會導致什麼後果?ReactJS中鍵的意義是什麼?
1
A
回答
7
鍵幫助陣營識別哪些項目已經改變,添加或移除。密鑰應給予數組中的元素給予元素的穩定的身份:
例子:
const numbers = [1, 2, 3, 4, 5];
const listItems = numbers.map((number) =>
<li key={number.toString()}>
{number}
</li>
);
TL;渲染DR使用唯一的和恆定的密鑰時動態的孩子,或者期待奇怪的事情發生。
我在使用React.js的幾週中發現的棘手方面之一是瞭解當它是兒童數組的一部分時,您期望傳遞給組件的關鍵屬性。這並不是說你必須指定此屬性,事情會工作的大部分時間除了獲得控制檯上的警告:
陣列中的每個孩子都應該有一個獨特的「鑰匙」的道具。檢查未定義的渲染方法。 通過閱讀鏈接的文檔可以很容易地看不到這種肯定的含義:
當React協調鍵控子項時,它將確保任何帶鍵的子項將被重新排序(而不是破壞)或銷燬(取而代之重用)。 起初看起來對我來說這是所有關於性能,但是,正如保羅O'Shannessy指出,它實際上是關於身份。
這裏的關鍵是理解並非DOM中的所有內容都在React「虛擬DOM」中有表示,並且由於DOM的直接操作(如用戶更改值或jQuery插件監聽元素)未被注意到反應,不使用唯一的和恆定的鍵將結束與反應再造一個部件的DOM節點時,關鍵是不恆定(和丟失在節點任何未跟蹤狀態)或重複使用DOM節點來呈現另一組件時,關鍵是不獨特的(並將其狀態綁定到這個其他組件)。
在這裏,您有一個顯示的結果多麼可怕的現場演示:
http://jsfiddle.net/frosas/S4Dju/
只需添加一個項目,更改,添加更多的項目,看看會發生什麼。
而且see
相關問題
- 1. ReactJS中的'...道具'是什麼意思?
- 2. 'useArrows:true'的意義是什麼?
- 3. PIDS_PER_CPU_DEFAULT的意義是什麼?
- 4. OrderedFriendsListInitialData的意義是什麼?
- 5. -532459699的意義是什麼?
- 6. !== -1的意義是什麼?
- 7. System.CLSCompliantAttribute的意義是什麼?
- 8. tab鍵是什麼意思?
- 9. 在reactjs中,什麼是wrappedComponent.propTypes?
- 10. J2EE中「Java 2」的意義是什麼?
- 11. CXF中「org.apache.cxf.resource.method」的意義是什麼?
- 12. vue.js中的重要意義是什麼?
- 13. Guardfile中m [1]的意義是什麼?
- 14. podspec在cocoapod中的意義是什麼?
- 15. 什麼是選擇「意義」 - 「」
- 16. 什麼是關鍵詞的幾許的意義JavaScript的聲明
- 17. 意義的'()=> {}`在ReactJS
- 18. 候選鍵有什麼意義?
- 19. reactjs中的組件是什麼?
- 20. reactjs中的正確方法是什麼?
- 21. 什麼是printf定義中的__format究竟意味着什麼?
- 22. 是什麼意思:是什麼意思?
- 23. Unit爲什麼是Anyval?這是什麼意思的語義?
- 24. 包裝方法的意義是什麼?
- 25. while(true)條件的意義是什麼?
- 26. @運算符的意義是什麼?
- 27. hh23對oracle的意義是什麼
- 28. AlertDialog.Builder類的意義是什麼?
- 29. java.io.Serializable類的意義是什麼?
- 30. Haskell的定義是什麼意思?