首页 > 其他分享 >关于 map 展示数据时 唯一key的问题

关于 map 展示数据时 唯一key的问题

时间:2022-12-05 16:37:05浏览次数:39  
标签:map const index 展示 唯一 key id

React 

后端给的数组数据,前端需要map展示出来,但是后端没有给 唯一标识 id ,前端该怎么办呢?

import React, { useState } from 'react';

const  TestComp = () => {
 const list = [
    {
   id: '1', name: 'name1', value: '', }, {
id: '2' name: 'name2', value: '', }, {
id: '3' name: 'name3', value: '', }, ]; const [data, setData] = useState(list); const deleteFirstHanlde = () => { const newdata = JSON.parse(JSON.stringify(data)); newdata.shift(); setData(newdata); }; return ( <div> {data.map((item, index)=> ( <div key={index}> {item.name} <input type="value" /> </div> ))} <div> <button onClick={deleteFirstHanlde}>删除第一项 </button> </div> </div> ); }; export default TestComp;

 

 

一、如果只是单纯的展示,不做任何的增加删除操作,那我们可以直接使用 index作为唯一标识

二、如果要做增加删除的操作,我们为什么不能使用 index作为 唯一的标识

(1)假如使用index作为唯一的标识,我们在三个input框里输入随机不同的值,然后点击删除第一项,我们会发现,文本展示是对的,但是input框里面的值 是最后一项没了,而不是第一项没了,因为 input是不受控的

       key = {index }   

 

 

(2)有时候我们会使用index 拼接 某个值来作为 唯一的 key标识。 我们来试一下。 text_${index}  或者 index +1  反正就是 index参与生成的

 key = {index + 3}  跟 key ={index}是一样的结果

 

 

  这张图是  key={`test_${index}`}  跟 key ={index}是一样的结果

 

   这个是 key={item.id}的结果,可以发现是正确的。

 

 

 这个是key={Math.random()}的结果,删除了第一项,但是input框里的值也没了,相当于整个都重新渲染了。所以不用

 

 

 结合上面的就是,最好让后端返回唯一的 id作为唯一标识,如果实在没有,可以自己拿到数据时 往里面自己生成一个唯一的id 然后再map到 页面中。但是 如果后端给的数据很复杂呢,对象数组,而且是多层的,自己使用递归添加也会很麻烦。还有其他方法吗?

 

标签:map,const,index,展示,唯一,key,id
From: https://www.cnblogs.com/zpy521hl/p/16952638.html

相关文章