在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美

當(dāng)前位置:雨林木風(fēng)下載站 > 網(wǎng)頁設(shè)計(jì)教程 > 詳細(xì)頁面

react中key的具體使用方法介紹(代碼示例)

react中key的具體使用方法介紹(代碼示例)

更新時間:2025-12-07 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

導(dǎo)網(wǎng)頁的本質(zhì)就是超級文本標(biāo)記語言,通過結(jié)合使用其他的Web技術(shù)(如:腳本語言、公共網(wǎng)關(guān)接口、組件等),可以創(chuàng)造出功能強(qiáng)大的網(wǎng)頁。因而,超級文本標(biāo)記語言是萬維網(wǎng)(Web)編程的基礎(chǔ),也就是說萬維網(wǎng)是建立...
網(wǎng)頁的本質(zhì)就是超級文本標(biāo)記語言,通過結(jié)合使用其他的Web技術(shù)(如:腳本語言、公共網(wǎng)關(guān)接口、組件等),可以創(chuàng)造出功能強(qiáng)大的網(wǎng)頁。因而,超級文本標(biāo)記語言是萬維網(wǎng)(Web)編程的基礎(chǔ),也就是說萬維網(wǎng)是建立在超文本基礎(chǔ)之上的。超級文本標(biāo)記語言之所以稱為超文本標(biāo)記語言,是因?yàn)槲谋局邪怂^“超級鏈接”點(diǎn)。
本篇文章給大家?guī)淼膬?nèi)容是關(guān)于react中key的具體使用方法介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

3958672420-5bfc322338e4d_articlex.png

在開發(fā)react程序時我們經(jīng)常會遇到這樣的警告,然后就會想到:哦!循環(huán)子組件忘記加key了~

出于方便,有時候會不假思索的使用循環(huán)的索引作為key,但是這樣真的好嗎?什么樣的值才是key的最佳選擇?

為了弄明白,本文將從三個方面來分析"key":

1.為什么要使用key

2.使用index做key存在的問題

3.正確的選擇key

1.為什么要使用key

react官方文檔是這樣描述key的:

Keys可以在DOM中的某些元素被增加或刪除的時候幫助React識別哪些元素發(fā)生了變化。因此你應(yīng)當(dāng)給數(shù)組中的每一個元素賦予一個確定的標(biāo)識。

react的diff算法是把key當(dāng)成唯一id然后比對組件的value來確定是否需要更新的,所以如果沒有key,react將不會知道該如何更新組件。

你不傳key也能用是因?yàn)閞eact檢測到子組件沒有key后,會默認(rèn)將數(shù)組的索引作為key。

react根據(jù)key來決定是銷毀重新創(chuàng)建組件還是更新組件,原則是:

  • key相同,組件有所變化,react會只更新組件對應(yīng)變化的屬性。

  • key不同,組件會銷毀之前的組件,將整個組件重新渲染。

2.使用index做key存在的問題

2.1 受控組件

單純的展示組件比如span,這些組件是受控組件,意味著他們的值將是我們給定好的。

如果子組件只是受控組件,使用index作為key,可能表面上不會有什么問題,實(shí)際上性能會受很大的影響。例如下面的代碼:

// ['張三','李四','王五']=>
<ul>
    <li key="0">張三</li>
    <li key="1">李四</li>
    <li key="2">王五</li>
</ul>
// 數(shù)組重排 -> ['王五','張三','李四'] =>
<ul>
    <li key="0">王五</li>
    <li key="1">張三</li>
    <li key="2">李四</li>
</ul>

當(dāng)元素?cái)?shù)據(jù)源的順序發(fā)生改變時,對應(yīng)的:

key為0,1,2的組件都發(fā)生了變化,三個子組件都會被重新渲染。(這里的重新渲染不是銷毀,因?yàn)閗ey還在)

相反,我們使用唯一id作為key:

// ['張三','李四','王五']=>
<ul>
    <li key="000">張三</li>
    <li key="111">李四</li>
    <li key="222">王五</li>
</ul>
// 數(shù)組重排 -> ['王五','張三','李四'] =>
<ul>
    <li key="222">王五</li>
    <li key="000">張三</li>
    <li key="111">李四</li>
</ul>

根據(jù)上面的更新原則,子組件的值和key均未發(fā)生變化,只是順序發(fā)生改變,因此react只是將他們做了移動,并未重新渲染。

2.2 非受控組件

像input這樣可以由用戶任意改變值,不受我們控制的組件,在使用了index作為key時可能會發(fā)生問題,看如下的栗子:

子組件:

  render() {
    return (
      <p>
        <p >值:{this.props.value}</p>
        <input />
      </p>
    );
  }
}

父組件

{
this.state.data.map((element, index) => {
    return <Child value={element} key={index} />
    })
}

我們在前兩個輸入框分別輸入對應(yīng)的值:

87540615-5bfc322338f63_articlex.png

然后在頭部添加一個元素:

2383248822-5bfc322335f5a_articlex.png

很明顯,這個結(jié)果并不符合我們的預(yù)期,我們來分析一下發(fā)生了什么:

<div key="0">
    <p >值:0</p>
    <input />
</div>
<div key="1">
    <p >值:1</p>
    <input />
</div>
<div key="2">
    <p >值:2</p>
    <input />
</div>

變化后:

<div key="0">
    <p >值:5</p>
    <input />
</div>
<div key="1">
    <p >值:0</p>
    <input />
</div>
<div key="2">
    <p >值:1</p>
    <input />
</div>
<div key="3">
    <p >值:2</p>
    <input />
</div>

可以發(fā)現(xiàn):key 0,1,2并沒有發(fā)生改變,根據(jù)規(guī)則,不會卸載組件,只會更新改變的屬性。

react只diff到了p標(biāo)簽內(nèi)值的變化,而input框中的值并未發(fā)生改變,因此不會重新渲染,只更新的p標(biāo)簽的值。

當(dāng)使用唯一id作為key后:

1778441717-5bfc3223332ed_articlex.png

<div key="000">
    <p >值:0</p>
    <input />
</div>
<div key="111">
    <p >值:1</p>
    <input />
</div>
<div key="222">
    <p >值:2</p>
    <input />
</div>

變化后:

<div key="555">
    <p >值:5</p>
    <input />
</div>
<div key="000">
    <p >值:0</p>
    <input />
</div>
<div key="111">
    <p >值:1</p>
    <input />
</div>
<div key="222">
    <p >值:2</p>
    <input />
</div>

可以很明顯的發(fā)現(xiàn):key為 111,222,333的組件沒有發(fā)生任何改變,react不會更新他們,只是新插入了子組件555,并改變了其他組件的位置。

3.正確的選擇key

3.1 純展示

如果組件單純的用于展示,不會發(fā)生其他變更,那么使用index或者其他任何不相同的值作為key是沒有任何問題的,因?yàn)椴粫l(fā)生diff,就不會用到key。

3.2 推薦使用index的情況

并不是任何情況使用index作為key會有缺陷,比如如下情況:

你要分頁渲染一個列表,每次點(diǎn)擊翻頁會重新渲染:

使用唯一id:

第一頁
<ul>
    <li key="000">張三</li>
    <li key="111">李四</li>
    <li key="222">王五</li>
</ul>
第二頁
<ul>
    <li key="333">張三三</li>
    <li key="444">李四四</li>
    <li key="555">王五五</li>
</ul>

翻頁后,三條記錄的key和組件都發(fā)生了改變,因此三個子組件都會被卸載然后重新渲染。

使用index:

第一頁
<ul>
    <li key="0">張三</li>
    <li key="1">李四</li>
    <li key="2">王五</li>
</ul>
第二頁
<ul>
    <li key="0">張三三</li>
    <li key="1">李四四</li>
    <li key="2">王五五</li>
</ul>

翻頁后,key不變,子組件值發(fā)生改變,組件并不會被卸載,只發(fā)生更新。

3.3 子組件可能發(fā)生變更/使用了非受控組件

大多數(shù)情況下,使用唯一id作為子組件的key是不會有任何問題的。

這個id一定要是唯一,并且穩(wěn)定的,意思是這條記錄對應(yīng)的id一定是獨(dú)一無二的,并且永遠(yuǎn)不會發(fā)生改變。

不推薦使用math.random或者其他的第三方庫來生成唯一值作為key。

因?yàn)楫?dāng)數(shù)據(jù)變更后,相同的數(shù)據(jù)的key也有可能會發(fā)生變化,從而重新渲染,引起不必要的性能浪費(fèi)。

如果數(shù)據(jù)源不滿足我們這樣的需求,我們可以在渲染之前為數(shù)據(jù)源手動添加唯一id,而不是在渲染時添加。

以上就是react中key的具體使用方法介紹(代碼示例)的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!


網(wǎng)站建設(shè)是一個廣義的術(shù)語,涵蓋了許多不同的技能和學(xué)科中所使用的生產(chǎn)和維護(hù)的網(wǎng)站。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

在线看毛片视频-国产免费av在线-欧美日韩一区二区三区-国产成人无码av在线播放无广告-亚洲人va欧美va人人爽-国产第一草草-西班牙黄色片-四虎在线网站8848-最新av片免费网站入口-东京热无码中文字幕av专区-日本大人吃奶视频xxxx-欧美精品一区二区三区四区五区-国产片天天弄-国产免费内射又粗又爽密桃视频-欧美爱爱网站-日韩v欧美
  • <li id="86scu"><menu id="86scu"></menu></li>
    <li id="86scu"></li>
    <button id="86scu"></button>
  • <s id="86scu"></s><button id="86scu"><menu id="86scu"></menu></button>
  • 在线观看的毛片| 天天影视综合色| 色诱视频在线观看| 成人免费播放器| 最近免费观看高清韩国日本大全| 激情视频免费网站| www日韩视频| 色悠悠久久综合网| 中文字幕国产免费| 在线观看国产一级片| 自拍偷拍21p| www.桃色.com| 免费看污污视频| 成人黄色大片网站| 免费无遮挡无码永久视频| 成年人午夜视频在线观看| 国产h视频在线播放| 成人免费在线小视频| 男人天堂999| 性欧美1819| 四虎永久免费网站| 97av中文字幕| 日韩人妻精品无码一区二区三区| 日韩中文字幕在线视频观看| 日韩av卡一卡二| 毛片在线视频观看| 国产 欧美 日本| 成人在线视频一区二区三区| 天天操天天干天天玩| 中文字幕色呦呦| 成人午夜免费在线视频| 欧美日韩黄色一级片| 精品国产一区三区| 久久九九国产视频| 奇米影视四色在线| 国产又粗又长又爽视频| 国产深夜男女无套内射| 国产麻花豆剧传媒精品mv在线| aⅴ在线免费观看| 九九九九九国产| 国产精品88久久久久久妇女| 精品人妻人人做人人爽| 国产3p露脸普通话对白| 国产淫片av片久久久久久| 一区二区三区视频在线观看免费| 人人爽人人av| 中文字幕一区二区在线观看视频 | 色爽爽爽爽爽爽爽爽| 黄色影视在线观看| 妺妺窝人体色www在线小说| 国产精品视频一区二区三区四区五区| 无码人妻丰满熟妇区96| 91免费黄视频| 免费看污污网站| 日韩精品福利片午夜免费观看| 爱福利视频一区二区| 亚洲第一色av| 久激情内射婷内射蜜桃| 亚洲色图欧美自拍| 99爱视频在线| 国产制服91一区二区三区制服| 国产欧美在线一区| 国产一级黄色录像片| 手机视频在线观看| 777精品久无码人妻蜜桃| 亚洲36d大奶网| 精品视频免费在线播放| 小说区视频区图片区| 国产视频一区二区视频| 婷婷五月综合缴情在线视频| 久久国产这里只有精品| 91成人在线观看喷潮教学| 日韩视频在线观看视频| 99re精彩视频| 国产一级不卡毛片| 国自产拍偷拍精品啪啪一区二区| 91精产国品一二三产区别沈先生| 国产情侣av自拍| 黄色一级二级三级| 欧美深夜福利视频| av日韩在线看| 欧美交换配乱吟粗大25p| 国产又大又长又粗又黄| 国产精品视频中文字幕| 国产一区二区在线免费播放| 欧美精品第三页| 青草青青在线视频 | 成人免费xxxxx在线视频| 97av视频在线观看| 成人性做爰片免费视频| 久久久久久久久网| 中国黄色录像片| 日韩精品免费一区| 成人黄色片免费| 少妇av一区二区三区无码| 精品成在人线av无码免费看| 毛片av在线播放| 老太脱裤子让老头玩xxxxx| 日本一区二区黄色| 日本美女高潮视频| 911福利视频| 日韩精品福利片午夜免费观看| 蜜桃网站在线观看| 成人性免费视频| 久久综合久久色| 97人人爽人人| 中文字幕av导航| 婷婷五月综合缴情在线视频| 激情网站五月天| 一区二区三区四区毛片| 全黄性性激高免费视频| 欧美日韩激情视频在线观看| 国产免费毛卡片| 午夜免费看毛片| 免费av手机在线观看| 三级4级全黄60分钟| 日本免费黄色小视频| 六月丁香婷婷激情| 欧美日韩理论片| 日韩avxxx| 日本丰满少妇黄大片在线观看| ww国产内射精品后入国产| 三年中国国语在线播放免费| 日本aa在线观看| 国产精品视频中文字幕| 成人免费在线网| 91日韩精品视频| 成人精品视频一区二区| 白白操在线视频| 中文字幕22页| 国产一二三区在线播放| 欧美性大战久久久久xxx| 国产经典久久久| 久国产精品视频| 8x8x最新地址| 欧美少妇性生活视频| 黄色一级视频在线播放| 精品一区二区三区毛片| 九九九九九国产| 日本国产一级片| 国产一二三区av| 手机看片福利日韩| 国产精品宾馆在线精品酒店| 精品国产一区二区三区无码| 亚洲一二三av| 人人爽人人爽av| 日韩无套无码精品| 好吊妞无缓冲视频观看| 精品视频免费在线播放| 国产www免费| a级免费在线观看| 精品国偷自产一区二区三区| 国产亚洲精品久久久久久久| 日韩第一页在线观看| 国产精品夜夜夜爽张柏芝| 99久久99精品| 咪咪色在线视频| 野外做受又硬又粗又大视频√| 91国在线高清视频| 无颜之月在线看| 日本a在线免费观看| 黄色三级中文字幕| 大伊香蕉精品视频在线| 很污的网站在线观看| 久久久一本二本三本| 激情视频综合网| 在线观看免费黄网站| 国产高清av在线播放| 欧美成人三级在线视频| www黄色在线| 57pao国产成永久免费视频| 亚洲天堂网站在线| 伊人再见免费在线观看高清版| 久久这里只有精品18| 国产九色porny| 蜜臀视频一区二区三区| 青娱乐精品在线| 大陆av在线播放| 九九热免费精品视频| 黄色小视频大全| 国产成人综合一区| 色哺乳xxxxhd奶水米仓惠香| 成人在线免费在线观看| 女同激情久久av久久| 少妇高潮大叫好爽喷水| 精品视频免费在线播放| 日韩中文在线字幕| 黄色片一级视频| 成人国产在线看| 污色网站在线观看| 国产人妻777人伦精品hd| 午夜大片在线观看| 欧美 日韩 国产 高清| 国产一区二区在线观看免费视频| 亚洲国产精品女人| 视频在线观看免费高清| 精品无码一区二区三区在线| 艳母动漫在线免费观看| 韩国一区二区av| 久草热视频在线观看|