diffing算法以及key值的作用

2023-10-29

在react/vue中key有什么作用?内部原理是什么?

一.虚拟dom中key的作用

简单的来说key就是虚拟dom对象中的标识,在更新显示时key有很重要的作用

原理:当状态中的数据发生改变的时候,react会根据【新数据】生成新的虚拟dom,随后react会将旧虚拟dom与新虚拟dom进行diff对比

二.对比规则的俩种场景:

1.旧的虚拟dom中找到了跟新的虚拟dom中一样的key:

(1)如果虚拟dom中的内容没变,则直接使用之前的真实dom
(2)如果虚拟dom中内容发生改变了,则生成新的真实dom,随后替换掉页面
中之前的真实dom

2.旧的虚拟dom中没有找到与新的虚拟dom一样的key 根据数据创建新的虚拟dom,随后渲染生成到页面上

三.用index作为key值会引发的问题:

1.如果数据进行逆序添加等破环顺序的操作会产生没有必要的真实dom更新,虽然页面效果没问题但是效率降低

2.如果结构中还包含输入类的dom,则会产生错误的dom更新

3.如果只是用于渲染列表,页面展示key使用index是没有任何问题的

四.下面是一个小栗子:

import React, { Component } from "react";

class Diff extends Component {
  state = {
    person: [
      { id: 1, name: "小张", age: 22 },
      { id: 2, name: "小袁", age: 21 },
    ],
  };
  add = () => {
    const { person } = this.state;
    if (person.length === 2) {
      var p = { id: person.length + 1, name: "小王", age: "19" };
    } else {
      return false;
    }
    this.setState({
      person: [p, ...person],
    });
  };
  render() {
    return (
      <div>
        <h2>人员信息展示:</h2>
        <button onClick={this.add}>添加一个小王</button>
        <ul>
          {this.state.person.map((item) => {
            return (
              <li key={item.id}>
                {item.name}---{item.age}
              </li>
            );
          })}
        </ul>
      </div>
    );
  }
}

export default Diff;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

diffing算法以及key值的作用 的相关文章

  • React中的“计算属性”

    React中的 计算属性 相信许多学习过vue的小伙伴对计算属性都不陌生吧 计算属性能帮我们数据进行一些计算操作 计算属性是依赖于data里面的数据的 在vue中只要计算属性依赖的data值发生改变 则计算属性就会调用 那React中也有计
  • react项目按需加载报错 .libraryName is not a valid Plugin property

    babel presets react app plugins import libraryName antd style true 原配置如上会报错 libraryName is not a valid Plugin property g
  • 函数式组件与类组件有何不同?

    与React类组件相比 React函数式组件究竟有何不同 在过去一段时间里 典型的回答是类组件提供了更多的特性 比如state 当有了Hooks后 答案就不再是这样了 或许你曾听过它们中的某一个在性能上的表现优于另一个 那是哪一个 很多此类
  • 对Fiber架构的理解?解决了什么问题?

    一 问题 JavaScript引擎和页面渲染引擎两个线程是互斥的 当其中一个线程执行时 另一个线程只能挂起等待 如果 JavaScript 线程长时间地占用了主线程 那么渲染层面的更新就不得不长时间地等待 界面长时间不更新 会导致页面响应度
  • 虚拟列表的实现思路(附带react代码)

    虚拟列表实现思路 代码链接 div class 滚动容器 div class 撑起列表正常高度 div div class 列表容器 div class 列表项 div div div 1 列表项 的高度确定 2 利用 滚动容器 的高度计算
  • React 组件通讯

    目录 1 组件通讯 概念 1 组件的特点 2 知道组件通讯意义 总结 2 组件通讯 props 基本使用 1 传递数据和接收数据的过程 2 函数组件使用 props 3 类组件使用 props 总结 3 组件通讯 props 注意事项 1
  • 【React】路由(详解)

    目录 单页应用程序 SPA 路由 前端路由 后端路由 路由的基本使用 使用步骤 常用组件说明 BrowserRouter和HashRouter的区别 路由的执行过程 默认路由 精确匹配 Switch的使用 重定向路由 嵌套路由 向路由组件传
  • 在校学生如何白嫖黑群辉虚拟机和内网穿透,实现海量资源的公网访问?(小白专用)

    文章目录 前言 本教程解决的问题是 按照本教程方法操作后 达到的效果是 前排提醒 1 搭建群辉虚拟机 1 1 下载黑群辉文件 vmvare虚拟机安装包 1 2 安装VMware虚拟机 1 3 解压黑 群辉虚拟机文件 1 4 虚拟机初始化 1
  • react 使用 scss

    react 使用 scss 日常记录开发中遇到的坑 1 使用 npm install sass loader node sass S 进行安装 2 在页面中直接使用 有时候可以 有时候不行 原因 我个人觉得安装的两个插件本版兼容问题 nod
  • 三、react中类组件和函数组件

    简介 本篇我们只要介绍react中类组件与函数组件两种组件的写法 两者的优缺点 同时对在我们的项目开发中该使用类组件还是函数组件进行思考分析 废话不多说进入正题 类组件 设计思路 类组件时面向对象编程的思想 在其中我们去设计类组件时使用st
  • 三分钟实现一个react-router-dom5.0的路由拦截(导航守卫)

    不同于vue 通过在路由里设置meta元字符实现路由拦截 在使用 Vue 框架提供了路由守卫功能 用来在进入某个路有前进行一些校验工作 如果校验失败 就跳转到 404 或者登陆页面 比如 Vue 中的 beforeEnter 函数 rout
  • React-(4)React中的事件绑定

    React中的事件绑定 在 React 组件中 每个方法的上下文都会指向该组件的实例 即自动绑定 this 为当前组件 而且 React 还会对这种引用进行缓存 以达到 CPU 和内存的最优化 在使用 ES6 classes 或者纯函数时
  • react之纯函数、函数组件、类组件、纯组件

    一 纯函数 Pure Function 定义 一个函数的返回结果只依赖于它的参数 并且在执行的过程中没有副作用 我们就把该函数称作纯函数 特点 1 函数的返回结果只依赖与它的参数 同一个输入只能有同一个输出 let foo a b gt a
  • react和react jsx基础

    本文是个人学习笔记 例子都是来自React Native官网 之前不是做前端的 没有使用过react 要学习react native做混合开发 react 包括react jsx还是得补补 react和react jsx react是一个j
  • React核心概念:状态提升

    上一节 表单 下一节 组合vs继承 React核心概念 状态提升 引言 添加第二个输入框 编写转换函数 状态提升 经验总结 引言 很多情况下我们使用的多个组件需要对同一个数据做出对应的反应 在这里我们推荐把这个共享的状态提升到距离这些组件最
  • ant design pro 代码学习(七) ----- 组件封装(登录模块)

    以登录模块为例 对ant design pro的组件封装进行相关分析 登录模块包含基础组件的封装 组件按模块划分 同类组件通过配置文件生成 跨层级组件直接数据通信等 相对来说还是具有一定的代表性 1 登录模块流程图 首先 全局了解一下登录模
  • 值得收藏的UmiJS 教程

    点击上方关注 前端技术江湖 一起学习 天天进步 前言 网上的umi教程是真的少 很多人都只写了一点点 很多水文 所以打算自己写一篇 自己搭建umi 并封装了一下常用的功能 并用到公司实际项目中 umi介绍 Umi 是什么 Umi 中文可发音
  • React Jsx转换成真实DOM过程?

    面试官 说说React Jsx转换成真实DOM过程 一 是什么 react 通过将组件编写的 JSX 映射到屏幕 以及组件中的状态发生了变化之后 React 会将这些 变化 更新到屏幕上 在前面文章了解中 JSX 通过 babel 最终转化
  • React Jsx转换成真实DOM过程?

    面试官 说说React Jsx转换成真实DOM过程 一 是什么 react 通过将组件编写的 JSX 映射到屏幕 以及组件中的状态发生了变化之后 React 会将这些 变化 更新到屏幕上 在前面文章了解中 JSX 通过 babel 最终转化
  • React安装依赖 node_modules中有下载依赖项但package.json文件中没有依赖

    React安装依赖 node modules中有下载依赖项但package json文件中没有依赖 直接在下载依赖项后 加 S 就可以解决 随机 id 生成器 uuid nanoid npm install nanoid S S save

随机推荐

  • 概率论与数理统计基础概念与重要定义汇总

    文章目录 一 随机事件和概率 1 互斥 对立 独立事件的定义和性质 2 概率 条件概率和五大概率公式 3 古典型 几何型概率和伯努利试验 4 易错问题汇总 二 随机变量及其分布 1 随机变量及其分布函数 2 常用分布 三 多维随机变量及其分
  • vscode 绑定已有的python环境

    vscode 绑定已有的python环境 先选择左下角那个 然后把这个python点击安装一下 回到程序文件页面 点开一个空的程序页面 同时按下ctrl shift P 弹出下拉框 在下拉框的搜索框输入select Interpreter
  • SpringFox 3尝鲜 集成SpringBoot生成Swagger接口文档

    SpringFox简介 SpringFox 是一个开源的API Doc的框架 它的前身是swagger springmvc 可以将我们的Controller中的方法以文档的形式展现 官方定义为 Automated JSON API docu
  • C++基础知识 - 优先级队列priority_queue

    优先级队列 priority queue 优先队列 它的入队顺序没有变化 但是出队的顺序是根据优先级的高低来决定的 优先级高的优先出队 最大值优先级队列 最小值优先级队列 用来开发一些特殊的应用 include lt queue gt pr
  • [创业之路-75] - 感悟 - 什么样的老板不值得长期跟谁?

    目录 1 只画饼没有实际行动的老板 靠骗人 2 内心不尊重员工的老板 太虚假 3 没有规划的老板 无计划 4 经常会承诺不兑现的老板 轻承诺 5 时常对陌生人忽悠的老板 无信誉 6 经常会承诺别人的老板 轻承诺 7 企业经营多年没把企业做大
  • URL路径 /** /* /?的含义

    匹配任意多级路径如 aa bb cc 仅可匹配一级路径如 aa 仅可匹配一级路径且最多只有一个字符 如 a
  • Webpack loader

    loader 概念 官网对 loader 的解释是这样的 webpack 只能理解 JavaScript 和 JSON 文件 这是 webpack 开箱可用的自带能力 loader 让 webpack 能够去处理其他类型的文件 并将它们转换
  • HDFS巡检、监控、调优、排障

    1 巡检 HDFS 为集群提供高可用性弹性存储服务 是集群的存储主体 每日早晚巡检HDFS 服务 包括HDFS 服务可用性 存储使用率 datanode 是否有故障盘等 1 1 HDFS 总体状态 HDFS 状态 如下的红色提示需要关注 H
  • 前端实现亚马逊AWS s3的跨域问题总结

    在s3控制台中添加存储桶并设置 跨域配置 测试环境直接开放 请求 不然会跨域
  • 基于Lending Club的数据分析实战项目【小白记录向】【二】

    本实战项目基于Lending Club的数据集 数据集地址 https github com H Freax lendingclub analyse 本实战项目基于Colab环境 文章目录 简介 使用机器学习方法进行解决 数据准备 机器学习
  • python 运算符

    python 运算符有基础运算符 赋值运算符 比较运算符 逻辑运算符 成员运算符和身份运算符 今天我们就来了解一下吧 基础运算符 赋值运算符 比较运算符 比较运算符也称关系运算符 运算符 lt gt 仅适用于 Python2 作用等同于 P
  • LLM论文周报|来自谷歌、Meta AI、香港中文大学等机构前沿论文研究

    大模型 LLM 是一种人工智能模型 旨在理解和生成人类语言 它们在大量的文本数据上进行训练 可以执行广泛的任务 包括文本总结 翻译 情感分析等等 LLM的特点是规模庞大 包含数十亿的参数 帮助它们学习语言数据中的复杂模式 这些模型通常基于深
  • 小白谈memcache和memcached的区别

    http www cnblogs com scotoma archive 2011 02 15 1955573 html 用了段时间的memcache和memcached总结下认识 看很多人在用cache的时候 刚刚都没有搞清楚memcac
  • Vue基础--基本语法

    一 介绍 1 Vue js 是什么 2 初识Vue js 二 基本语法 1 基本数据渲染和指令 2 双向数据绑定 3 事件 4 修饰符 5 条件渲染 6 列表渲染 7 计算属性 一 介绍 1 Vue js 是什么 Vue 读音 vju 类似
  • <微机原理>[汇编语言]-[实验八]矩阵键盘应用实验

    实验八 矩阵键盘应用实验 实验八 矩阵键盘应用实验 doc 一 实验目的 掌握矩阵式键盘识别技术 进一步掌握数码管显示原理 二 实验主要仪器和环境 Keil5 普中A2开发板 stc isp 三 实验内容 用单片机的并行口P1接矩阵键盘 在
  • 亲爱的友友们,有在运行detection测试时,遇到“找不到指定模块的问题”吗?

    我的MMdertection是安装的CPU版本的 因为没有独立显卡 救救孩子吧
  • 10分钟搞定miniconda-python环境安装

    windows配置python环境 每次到一个新电脑就要安装环境 很多包安装起来很麻烦 下面对安装地址和常规使用包做了总结 一键安装所有包不用再一个一个找了 所有问题10分钟搞定 1 安装Miniconda 可在清华大学开源软件镜像站下载安
  • Wordpress 安装,文件夹权限设置

    wordpress 权限对安装和使用效果的影响很大 权限错误将影响theme的安装 不能安装theme或者修改theme或删除theme 相关设置 chmod 755 wordpress find wordpress type d exec
  • DTS高管Roy Law:智能手机是重点发展方向

    2012年初 DTS公司宣布将收购SRS实验室 引发业界轰动 外界分析称 本次收购将加速实现DTS研发更先进的 功能完整的集成音频解决套件的策略 包括从语音处理技术至混音技术 两者强强结合之后 将对杜比公司发起有力挑战 产业整合趋势也逐渐显
  • diffing算法以及key值的作用

    在react vue中key有什么作用 内部原理是什么 一 虚拟dom中key的作用 简单的来说key就是虚拟dom对象中的标识 在更新显示时key有很重要的作用 原理 当状态中的数据发生改变的时候 react会根据 新数据 生成新的虚拟d