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 应用多入口配置及实践总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • react axios配置代理(proxy),如何解决本地开发时的跨域问题

    react axios配置代理(proxy),如何解决本地开发时的跨域问题

    这篇文章主要介绍了react axios配置代理(proxy),如何解决本地开发时的跨域问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • React-redux实现小案例(todolist)的过程

    React-redux实现小案例(todolist)的过程

    这篇文章主要为大家详细介绍了React-redux实现小案例(todolist)的过程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • 如何在 React 中重拾原生 HTML 属性

    如何在 React 中重拾原生 HTML 属性

    本文将从基础到深入,拆解为什么在 React 组件中大量使用原生属性(尤其是 data-*)是一种更专业、更可维护、更高性能的工程实践,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • react MPA 多页配置详解

    react MPA 多页配置详解

    这篇文章主要介绍了react MPA 多页配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • react实现keep-alive功能

    react实现keep-alive功能

    React无内置keep-alive,可通过父组件状态缓存、React Router自定义缓存、第三方库(如react-keep-alive)实现,接下来通过本文给大家详细介绍react实现keep-alive功能的详细过程,感兴趣的朋友一起看看吧
    2025-08-08
  • 浅谈从React渲染流程分析Diff算法

    浅谈从React渲染流程分析Diff算法

    这篇文章主要介绍了浅谈从React渲染流程分析Diff算法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • React+Vite中利用Fetch将CSV数据转成JSON字符串

    React+Vite中利用Fetch将CSV数据转成JSON字符串

    在一些小型项目中,前端可能需要直接处理 CSV 文件数据,将其转换为 JSON 字符串后再进行逻辑操作和展示,本文将会介绍两种方法,需要的朋友可以参考下
    2025-12-12
  • react事件回调中使用防抖失败的常见错误和正确使用方式

    react事件回调中使用防抖失败的常见错误和正确使用方式

    这篇文章主要介绍了react事件回调中使用防抖失败的常见错误和正确使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • React.Js添加与删除onScroll事件的方法详解

    React.Js添加与删除onScroll事件的方法详解

    这篇文章主要给大家介绍了关于React.Js添加与删除onScroll事件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11

最新评论