React、Vue中key的作用详解 (key的内部原理解析)

 更新时间:2023年10月31日 09:07:44   作者:夕苜19  
key是虚拟DOM对象的标识,当状态中的数据发生变化时,Vue会根据[新数据]生成[新的虚拟DOM],本文给大家介绍React、Vue中key的作用详解 (key的内部原理解析),感兴趣的朋友一起看看吧

1. 虚拟DOM中key的作用:

   key是虚拟DOM对象的标识,当状态中的数据发生变化时,Vue会根据[新数据]生成[新的虚拟DOM]

   随后Vue进行[新虚拟DOM]与[旧虚拟DOM]的差异比较,比较规则如下:

2. 对比规则:

  (1).旧虚拟DOM中找到了与新虚拟DOM相同的key:

    ①.若虚拟DOM中内容没变,直接使用之前的真实DOM!

    ②.若虚拟DOM中内容变了,则生成新的真实DOM,随后替换掉页面中之前的真实DOM。

  (2).旧虚拟DOM中未找到与新虚拟DOM相同的key创建新的真实DOM,随后渲染到到页面。

3. 用index作为key可能会引发的问题:

  (1).若对数据进行: 逆序添加、逆序删除等破坏顺序操作:

         会产生没有必要的真实DOM更新 ==> 界面效果没问题,但效率低

  (2).如果结构中还包含输入类的DOM:

         会产生错误DOM更新 ==> 界面有问题

4. 开发中如何选择key?

  (1).最好使用每条数据的唯一标识作为key,比如id、手机号、身份证号、学号等唯一值。

  (2).如果不存在对数据的逆序添加、逆序删除等破坏顺序操作,仅用于渲染列表用于展示,

      使用index作为key是没有问题的。

<body>
    <div id="root">
        <h2>人员列表</h2>
        <button @click="add_liu">点击添加一个老刘</button>
        <ul>
            <!-- <li v-for='p in persons' :key="p.id"> -->
            <li v-for='p in persons' :key="index">
                {{p.name}} - {{p.age}}  <input type="text">
            </li>
        </ul>
    </div>
</body>
<script>
    let vm = new Vue({
        el: "#root",
        data:{
            persons: [
                {
                    id: '001',
                    name: "张三",
                    age: 18,
                },
                {
                    id: '002',
                    name: "李四",
                    age: 19,
                },
                {
                    id: '003',
                    name: "王五",
                    age: 20,
                }
            ],
        },
        methods: {
            add_liu: function(){
                const liu = 
                {
                    id: '004',
                    name: "老刘",
                    age: 30,
                }
                this.persons.unshift(liu)
            }
        },
    })
</script>

到此这篇关于React、Vue中key的作用详解 (key的内部原理解析)的文章就介绍到这了,更多相关react vue key作用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文带你了解React中的函数组件

    一文带你了解React中的函数组件

    函数式组件的基本意义就是,组件实际上是一个函数,不是类,下面这篇文章主要给大家介绍了关于React中函数组件的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 使用react+redux实现计数器功能及遇到问题

    使用react+redux实现计数器功能及遇到问题

    使用redux管理数据,由于Store独立于组件,使得数据管理独立于组件,解决了组件之间传递数据困难的问题,非常好用,今天重点给大家介绍使用react+redux实现计数器功能及遇到问题,感兴趣的朋友参考下吧
    2021-06-06
  • React-Native中一些常用组件的用法详解(一)

    React-Native中一些常用组件的用法详解(一)

    这篇文章主要跟大家分享了关于React-Native中一些常用组件的用法,其中包括View组件、Text组件、Touchable类组件、TextInput组件以及Image组件的使用方法,分别给出了详细的示例代码供大家参考学习,需要的朋友们下面来一起看看吧。
    2017-06-06
  • 深入浅析react native es6语法

    深入浅析react native es6语法

    这篇文章主要介绍了深入浅析react native es6语法的相关资料,需要的朋友可以参考下
    2015-12-12
  • 关于react-router-dom路由入门教程

    关于react-router-dom路由入门教程

    这篇文章主要介绍了关于react-router-dom路由入门教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • react 组件实现无缝轮播示例详解

    react 组件实现无缝轮播示例详解

    这篇文章主要为大家介绍了react 组件实现无缝轮播示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 使用ES6语法重构React代码详解

    使用ES6语法重构React代码详解

    本篇文章主要介绍了使用ES6语法重构React代码详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • react项目初始化时解析url路径中的动态片段实现方案

    react项目初始化时解析url路径中的动态片段实现方案

    本文将深入探讨React项目初始化阶段如何高效解析URL路径中的动态片段,实现优雅的路由参数处理,帮助开发者构建更灵活的应用程序,感兴趣的朋友一起看看吧
    2025-07-07
  • 详解React 在服务端渲染的实现

    详解React 在服务端渲染的实现

    这篇文章主要介绍了详解React 在服务端渲染的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • React中使用TS完成父组件调用子组件的操作方法

    React中使用TS完成父组件调用子组件的操作方法

    由于在项目开发过程中,我们往往时需要调用子组件中的方法,这篇文章主要介绍了React中使用TS完成父组件调用子组件,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07

最新评论