最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

react為什么不推薦使用index作為key

 更新時間:2021年07月22日 11:43:15   作者:JQ...  
本文主要介紹了react為什么不推薦使用index作為key,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

1.舊的虛擬dom和新的虛擬dom對比,首先看他們的key是否相同
2.相同繼續(xù)對比他們的內(nèi)容,不同生成新的真實(shí)dom進(jìn)行替換
3.如果內(nèi)容和key都相同,復(fù)用舊的真實(shí)dom 不做改變

那么如果我們使用遍歷時候自動生成的index作為每個節(jié)點(diǎn)的key可能會出現(xiàn)什么問題呢? 下面放個小案例

首先,初始時我們進(jìn)行遍歷persons

他會是這樣一個過程,源數(shù)據(jù)

persons: [
{ id: 1, name: “張三”, age: 15 },
{ id: 2, name: “李四”, age: 16 },
],

生成的真實(shí)dom節(jié)點(diǎn)

<ul>
      <li key="0">張三--15</li>
      <li key="1">李四--16</li>
    </ul>

然后我們在這個名單前面插入一個{id:3,name:‘王五',age:14}的數(shù)據(jù)會變成這樣子

<ul>
   <li key="0">王五--14</li>
      <li key="1">張三--15</li>
      <li key="2">李四--16</li>
    </ul>

通過上面的更新可以發(fā)現(xiàn) 王五將之前張三的key給占用了
也就是說當(dāng)我進(jìn)行更新這一過程首先新的虛擬dom

<li key="0">王五--14</li>

和舊的虛擬dom

<li key="0">張三--15</li>

進(jìn)行比較 新的dom先比較key兩人相同,在比較內(nèi)容一個是王五–14 一個是張三15 ,內(nèi)容發(fā)生變化了,這時就會進(jìn)行使用新的虛擬dom生成新的真是dom重新渲染頁面,而且不僅是之前的張三受影響需要重新生成,后面的李四也要被張三進(jìn)行替換在生成一個新的內(nèi)容為張三的真實(shí)dom,這樣就會導(dǎo)致所有的dom都要重新生成重新渲染,導(dǎo)致性能下降

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script src="https://unpkg.com/react@16/umd/react.development.js"></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
    <script src="https://unpkg.com/babel-standalone@6.26.0/babel.js"></script>

    <div id="root"></div>
    <script type="text/babel">
      let root = document.getElementById("root");
      class App extends React.Component {
        constructor(props) {
          super(props);
        }
        state = {
          persons: [
            { id: 1, name: "張三", age: 15 },
            { id: 2, name: "李四", age: 16 },
          ],
        };
        handle = () => {
          const { persons } = this.state;
          const p = {
            id: 0,
            name: "王五",
            age: 14,
          };
          this.setState({
            persons: [p, ...persons],
          });
        };
        render() {
          return (
            <div>
              <button onClick={this.handle}>點(diǎn)擊添加</button>
              <ul>
                {this.state.persons.map((person, index) => (
                  <li key={index}>
                    {person.name}--{person.age}
                  </li>
                ))}
              </ul>
            </div>
          );
        }
      }
      ReactDOM.render(<App name="hell" />, root);
    </script>
  </body>
</html>

試想一下經(jīng)過上面的推導(dǎo)致,如果我們使用id作為唯一的key值會怎么樣呢

更新前

<ul>
      <li key="1">張三--15</li>
      <li key="2">李四--16</li>
    </ul>

更新后

<ul>
   <li key="0">王五--14</li>
      <li key="1">張三--15</li>
      <li key="2">李四--16</li>
    </ul>

這次 雖然王五插入的還是張三的前面但是只對比了一次 王五和上面是否有一樣的key=0的節(jié)點(diǎn) ,沒有生成新的真實(shí)dom進(jìn)行渲染,而張三和上面key=1的進(jìn)行對比,發(fā)現(xiàn)上面有一個key=1的節(jié)點(diǎn),然后再對比他們的內(nèi)容是否相同,發(fā)現(xiàn)內(nèi)容也相同,那么就可以復(fù)用舊的真實(shí)dom,節(jié)約性能

到此這篇關(guān)于react為什么不推薦使用index作為key的文章就介紹到這了,更多相關(guān)react index作為key內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • react+redux仿微信聊天界面

    react+redux仿微信聊天界面

    這篇文章主要介紹了react+redux仿微信聊天IM實(shí)例|react仿微信界面 ,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • 使用react-dnd編寫一個可拖拽排列的list

    使用react-dnd編寫一個可拖拽排列的list

    這篇文章主要為大家詳細(xì)介紹了如何使用react-dnd編寫一個可拖拽排列的list,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • 淺談React Component生命周期函數(shù)

    淺談React Component生命周期函數(shù)

    React組件有哪些生命周期函數(shù)?類組件才有的生命周期函數(shù),分為幾個階段:掛載,更新,卸載,錯誤處理,本文主要介紹了這個階段,感興趣的可以了解一下
    2021-06-06
  • React?代碼拆分的幾種方法示例詳解

    React?代碼拆分的幾種方法示例詳解

    這篇文章主要為大家介紹了React?代碼拆分的幾種方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • ReactNative頁面跳轉(zhuǎn)Navigator實(shí)現(xiàn)的示例代碼

    ReactNative頁面跳轉(zhuǎn)Navigator實(shí)現(xiàn)的示例代碼

    本篇文章主要介紹了ReactNative頁面跳轉(zhuǎn)Navigator實(shí)現(xiàn)的示例代碼,具有一定的參考價值,有興趣的可以了解一下
    2017-08-08
  • React教程之封裝一個Portal可復(fù)用組件的方法

    React教程之封裝一個Portal可復(fù)用組件的方法

    react的核心之一是組件,下面這篇文章主要給大家介紹了關(guān)于React教程之封裝一個Portal可復(fù)用組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • React八大常見錯誤及其解決方案

    React八大常見錯誤及其解決方案

    這篇文章主要介紹了React八大常見錯誤及其解決方案,并通過代碼示例介紹的非常詳細(xì),對大家學(xué)習(xí)react有一定的幫助,感興趣的朋友可以參考下
    2024-03-03
  • React router基礎(chǔ)使用方法詳解

    React router基礎(chǔ)使用方法詳解

    這篇文章主要介紹了React router基礎(chǔ)使用方法,React Router是React生態(tài)系統(tǒng)中最受歡迎的第三方庫之一,近一半的React項(xiàng)目中使用了React Router,下面就來看看如何在React項(xiàng)目中使用
    2023-04-04
  • react+antd+upload結(jié)合使用示例

    react+antd+upload結(jié)合使用示例

    這篇文章主要為大家介紹了react+antd+upload結(jié)合使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • React組件封裝中三大核心屬性詳細(xì)介紹

    React組件封裝中三大核心屬性詳細(xì)介紹

    這篇文章主要為大家介紹了React組件實(shí)例三大屬性state props refs使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09

最新評論

承德市| 潼关县| 抚顺市| 兴海县| 吴川市| 榆中县| 丰台区| 麟游县| 吉木乃县| 绥化市| 厦门市| 襄城县| 南召县| 平武县| 远安县| 集安市| 皮山县| 漳州市| 故城县| 隆回县| 五常市| 岑巩县| 宝坻区| 昆明市| 晋城| 信阳市| 平南县| 黄浦区| 钟山县| 南木林县| 天台县| 南平市| 永春县| 民权县| 潢川县| 宜春市| 防城港市| 恩平市| 绍兴市| 宁武县| 关岭|