如何在反应 js 中使用 uuid 添加唯一键?

Posted

技术标签:

【中文标题】如何在反应 js 中使用 uuid 添加唯一键?【英文标题】:how to add unique key using uuid in react js? 【发布时间】:2022-01-11 05:43:04 【问题描述】:

我在 StockOverflow 中读到了某人的评论,他谈到了 React 键并说

'React 需要 STABLE 键,这意味着您应该分配一次键,并且列表中的每个项目每次都应该收到相同的键,这样 React 可以在协调虚拟 DOM 并决定哪些组件时围绕您的数据更改进行优化需要重新渲染。因此,如果您使用 UUID,则需要在数据级别而不是在 UI 级别执行此操作,

我想问是否有人知道如何在实际代码中应用它,例如我们有一个上下文组件,它有一个对象数组和另一个映射通过这个数组的组件,我们如何使用 uuid( ) 或任何其他软件包。

【问题讨论】:

通常数据来自在对象上具有 id 的 API,并且您使用这些 id 作为 React 列表的键。您在这里的用例是什么? 假设数据没有id,我们需要显式添加一个带有库的id 然后根据您的需要和用例添加 id。你在哪里坚持这个?这个问题/问题似乎太投机了,无法在这里讨论。 其实我一直在找一些关于这个的文章,但是我没有找到我真正需要的东西,所以我决定在这里发帖。好吧,我认为马里奥的回答对我来说是一个很好的回答,谢谢 ggorlen 的宝贵时间,我很感激。 【参考方案1】:

虽然在 FE 上生成 id 并不是一个常见的要求,但它有时会发生,所以使用uuid 是一个非常好的方法。这很简单,实施也很快。

我在这里为你做了一个例子:

import  useEffect, useState  from "react";
import  v1  from "uuid";
import "./styles.css";

const items:  name: string; id?: string [] = [
  
    name: "Name1"
  ,
  
    name: "Name2"
  ,
  
    name: "Name3"
  ,
  
    name: "Name4"
  ,
  
    name: "Name5"
  ,
  
    name: "Name6"
  
];

export default function App() 
  const [itemList, setItemList] = useState< name: string; id?: string []>([]);

  useEffect(() => 
    setItemList(items.map((item) => ( ...item, id: v1() )));
  , []);

  return (
    <div className="App">
      itemList.map((item) => (
        <div key=item.id>
          item.name - item.id
        </div>
      ))
    </div>
  );

在此示例中,您的数组在开始时为空,在第一个 useEffectitems 填充后,uuid 生成 ids:

And code sandbox code

【讨论】:

好的,谢谢先生,感谢您的帮助。 不客气。请尝试为您的问题添加一些代码示例,以便想要帮助您的人不会从头开始编写所有内容。 好的,我下次试试。

以上是关于如何在反应 js 中使用 uuid 添加唯一键?的主要内容,如果未能解决你的问题,请参考以下文章

反应列表中的每个孩子都应该有一个唯一的“关键”道具。即使钥匙存在

mysql将唯一的uuid添加到现有表

如何在 Sequelize 中使用外键和常规键创建复合唯一约束?

如何将UUID设置成系统唯一标识

如何选择主键uuid

Mysql 用UUID做主键可行么