浅了解:react为何需要设定唯一key值(antd-table)

一、React规范

1.1 react key的作用

当渲染重复数据的时候,React.diff会根据生成的key进行虚拟DOM渲染, 所以我们需要在遍历的地方都要加上key,例如map、for等等

同样, antd作为react的UI组件库, 有些地方也需要遵循react的key规范.例如 antd-table 在渲染前要求: 在 Table 中,dataSource 和 columns 里的数据值都需要指定 key 值。对于 dataSource 默认将每列数据的 key 属性作为唯一的标识。

1.2 react key缺失

如果你的数据没有这个属性,务必使用 rowKey 来指定数据列的主键。若没有指定,控制台会出现以下的提示,表格组件也会出现各类奇怪的错误。

Each record in table should have a unique key prop,or set rowKey to an unique primary key.

虽然只是一个警告,但是这个会给页面table表格带来无法预测的错误

1.3 react key相同

这种情况感觉到的错误会比较明显:因为你在一个列上的操作,在相同key上的列也会响应!

当鼠标滑过其中一个列并高亮的时候, 另一个列也会被高亮

二、添加Key值

我们知道了为什么添加key, 以及不添加key值会出现什么情况

2.1 完善dataSourcecolumns

每一行(dataSource)和每一列(columns)都应该要有一个唯一key值, 渲染的时候react才能准确知道是否需要修改.

let columns = [{
    key: ‘1‘,
    title: ‘歌曲名字‘,
    dataIndex: ‘title‘
}]

let dataSource = [{
    key: 1,
    title: ‘哑巴‘
}]

<Table
    columns={columns}
    dataSource={dataSource}
/>

2.2 直接在table上加上每一列key值:rowKey

但是注意: 这个key也是要求唯一的

<Table
    rowKey={(record, index) => `complete${record.id}${index}`}
    ...
/>

具体的可以查看官方文档: 《antd-table》

原文地址:https://www.cnblogs.com/soyxiaobi/p/9871379.html

时间: 2024-11-09 01:48:56

浅了解:react为何需要设定唯一key值(antd-table)的相关文章

【共享单车】—— React后台管理系统开发手记:AntD Table基础表格

前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. 一.基础表格 Table组件基础Api bordered属性:是否展示外边框和列边框 columns属性:表格列的配置描述(即表头) dataSource属性:数据数组 pagination属性:分页器,设为 false 时不展示和进行分页 <Card title="基础表格"&g

【react】---react中key值的作用

一.React中key值得作用 react中的key属性,它是一个特殊的属性,它是出现不是给开发者用的,而是给React自己使用,有了key属性后,就可以与组件建立了一种对应关系,简单说,react利用key来识别组件,他是一种身份标识,就像每个人有一个身份证来做辨识一样.每个key 对应一个组件,相同的key react认为是同一个组件,这样后续相同的key对应组件都不会被创建 key值相同 如果两个元素是相同的key,且满足第一点元素类型相同, 若元素属性有所变化,则React只更新组件对应

【转】浅谈React、Flux 与 Redux

本文转自<浅谈React.Flux 与 Redux>,转载请注明出处. React React 是一个 View 层的框架,用来渲染视图,它主要做几件事情: 组件化 利用 props 形成单向的数据流 根据 state 的变化来更新 view 利用虚拟 DOM 来提升渲染性能 前面说到 React 能够根据 state 的变化来更新 view,一般来说引起 state 变化的动作除了来自外部(如服务器),大部分都来自于页面上的用户活动,那页面上的用户活动怎样对 state 产生作用呢?Reac

在react或vue中,for循环用Index作为key值是好还是坏呢?

React 与 vue的基本实现原理是通过对比两次虚拟dom的不同 然后直接操作不同的dom 当以数组的下标index作为key值时  其中一个元素发生了变化 就有可能导致所有元素的key值发生改变  diff算法是比较同级之间的不同  以key来进行关联  当对数组进行下标的变换时,比如删除第一条数据,那么以后所有的Index都会发生改变,那么key自然也跟着全部发生改变, 所以index作为key值是不稳定的,这种不稳定性有可能导致性能的浪费 导致diff无法关联起上一次一样的数据  因此

浅谈React工作原理

Reactjs 起源于Facebook内部项目,是一个用来构建用户界面的 javascript 库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React 把每一个组件当成了一个状态机,组件内部通过state来维护组件状态的变化,当组件的状态发生变化时,React通过虚拟DOM技术来增量并且高效的更新真实DOM.本文将对React 的这些特点进行简单的介绍. 一个简单的React组件 -- HelloReact  考虑到有的同学还不曾了解过React,我们先来写一个简单的React组

Map/HashMap 获取Key值的方法

1.通过  KeySet()方法 Map<String,Student> newmap = new HashMap<String,Student>(); //newmap HaspMap类型的集合 有唯一的Key,一个Key对应相应的学生 Student stu = new Student("11","Mary","79"); //创建一个学生对象 学号11; 姓名 Mary 成绩 79 newmap.put("

React使用antd Table生成层级多选组件

一.需求 用户对不同的应用需要有不同的权限,用户一般和角色关联在一起,新建角色的时候会选择该角色对应的应用,然后对应用分配权限.于是写了一种实现的方式.首先应用是一个二级树,一级表示的是应用分组,二级表示的是应用,这是table的最左边的数据.然后是按钮的数据,这里显示在table的头部. 二.效果图如下 三.具体代码 1.RoleApplicationTable.js import React from 'react'; import RoleCheckbox from 'components

Activiti 删除key值相同的所有不同版本的流程定义

package com.mycom.processDefinition; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.zip.ZipInputSt

mysql 中的外键key值的详解

如果Key是空的, 那么该列值的可以重复, 表示该列没有索引, 或者是一个非唯一的复合索引的非前导列2. 如果Key是PRI,  那么该列是主键的组成部分3. 如果Key是UNI,  那么该列是一个唯一值索引的第一列(前导列),并别不能含有空值(NULL)4. 如果Key是MUL,  那么该列的值可以重复, 该列是一个非唯一索引的前导列(第一列)或者是一个唯一性索引的组成部分但是可以含有空值NULL 如果对于一个列的定义,同时满足上述4种情况的多种,比如一个列既是PRI,又是UNI那么"desc