react中key的作用是:在diff演算法中判斷元素是最新創建的還是被移動來的,從而減少不必要的diff,也就是為了提高diff同級比較的效率,避免原地復用帶來的副作用;key是react用來追蹤清單的元素被修改,被加或是被刪除的標識。
本教學操作環境:Windows10系統、react17.0.1版、Dell G3電腦。
react的key有什麼用
作用
#跟Vue一樣,React 也存在diff演算法,而元素key屬性的作用是用於判斷元素是新創建的還是被移動的元素,從而減少不必要的Diff
在react的diff演算法中react會藉助元素的key來判斷該元素是最新創建的還是被移動而來的,從而減少不必要的元素渲染。除此之外,react還要根據key來判斷元素與本地狀態的關聯關係
簡單的來說就是為了提高diff的同級比較的效率,避免原地復用帶來的副作用,
vue和react本身都是採用diff的演算法vue採用的是更為細粒的更新元件方式,即是給每一個屬性綁定監聽,
react採用的是自頂而下的更新策略,每次小的改動都會產生一個全新的vdom,從而進行diff,如果不寫key,就會發生本來應該更新卻沒有更新
key是什麼
key是react用來追蹤哪些清單的元素被修改,被加入或是被刪除的輔助標示。在開發過程中我們需要保證某個元素的key在其同級元素中具有唯一性。
如果列表資料渲染中,在資料後面插入一條數據,key作用並不大,如下:
this.state = { numbers:[111,222,333] } insertMovie() { const newMovies = [...this.state.numbers, 444]; this.setState({ movies: newMovies }) } <ul> { this.state.movies.map((item, index) => { return <li>{item}</li> }) } </ul>
前面的元素在diff演算法中,前面的元素由於是完全相同的,並不會產生刪除創建操作,在最後一個比較的時候,則需要插入到新的DOM樹中
#因此,在這種情況下,元素有無key屬性意義並不大
下面再來看看在前面插入資料時,使用key與不使用key的區別:
insertMovie() { const newMovies = [000 ,...this.state.numbers]; this.setState({ movies: newMovies }) }
當擁有key的時候,react根據key屬性匹配原有樹上的子元素以及最新樹上的子元素,像上述情況只需要將000元素插入到最前面位置
當沒有key的時候,所有的li標籤都需要進行修改
同樣,並不是擁有key值代表效能越高,如果說只是文字內容改變了,不寫key反而效能和效率更高
主要是因為不寫key是將所有的文字內容替換一下,節點不會改變
而寫key則涉及到了節點的增和刪,發現舊key不存在了,則將其刪除,新key在之前沒有,則插入,這就增加性能的開銷
總結
良好使用key屬性是效能最佳化的非常關鍵的一步,注意事項為:
key 應該是唯一的
key不要使用隨機值(隨機數下一次render 時,會重新產生一個數字)
避免使用index 作為key
react判斷key的流程具體如下圖:
推薦學習:《react影片教學》
以上是react的key有什麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

React'sstrongCommunityAndecoSystemoffernumerBeneFits:1)age awealthoflibrariesandgithub; 2)AwealthoflibrariesandTools,sustasuicomponentLibontlibemontLibrariesLikeChakaAkraUii; 3)

ReactNativeischosenformobiledevelopmentbecauseitallowsdeveloperstowritecodeonceanddeployitonmultipleplatforms,reducingdevelopmenttimeandcosts.Itoffersnear-nativeperformance,athrivingcommunity,andleveragesexistingwebdevelopmentskills.KeytomasteringRea

在React中正確更新useState()狀態需要理解狀態管理的細節。 1)使用函數式更新來處理異步更新。 2)創建新狀態對像或數組來避免直接修改狀態。 3)使用單一狀態對像管理複雜表單。 4)使用防抖技術優化性能。這些方法能幫助開發者避免常見問題,編寫更robust的React應用。

React的組件化架構通過模塊化、可重用性和可維護性使得可擴展UI開髮變得高效。 1)模塊化允許UI被分解成可獨立開發和測試的組件;2)組件的可重用性在不同項目中節省時間並保持一致性;3)可維護性使問題定位和更新更容易,但需避免組件過度複雜和深度嵌套。

在React中,聲明式編程通過描述UI的期望狀態來簡化UI邏輯。 1)通過定義UI狀態,React會自動處理DOM更新。 2)這種方法使代碼更清晰、易維護。 3)但需要注意狀態管理複雜性和優化重渲染。

TonavigateReact'scomplexecosystemeffectively,understandthetoolsandlibraries,recognizetheirstrengthsandweaknesses,andintegratethemtoenhancedevelopment.StartwithcoreReactconceptsanduseState,thengraduallyintroducemorecomplexsolutionslikeReduxorMobXasnee

RectuseSkeyStoeficelyListifyListIdifyListItemsbyProvidistableIdentityToeachelement.1)keysallowReaeActTotRackChangEsInListSwithouterSwithoutreThoutreTheenteringTheEntirelist.2)selectuniqueandstablekeys,避免使用

KeysinrectarecrucialforOptimizingTherEnderingProcessandManagingDynamicListSefectefection.tospotaTandFixKey與依賴的人:1)adduniqueKeykeystoliquekeystolistItemStoAvoidWarningSwarningSwarningSwarningSperformance和2)useuniqueIdentifiersIdentifiersIdentifiersIdentifiersFromdatainSteAtofIndicessuessuessessemessuessessemessemessemesseysemessekeys,3)


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Atom編輯器mac版下載
最受歡迎的的開源編輯器