reactjs 如何在react js中使用uuid添加唯一密钥?

3lxsmp7m  于 2022-12-26  发布在  React
关注(0)|答案(2)|浏览(369)

我在StockOverflow读到一个人的评论,他谈到了React键,说
'React需要STABLE键,这意味着您应该分配一次键,并且列表中的每个项目每次都应该接收相同的键,这样React在协调虚拟DOM时可以围绕您的数据更改进行优化,并决定需要重新呈现哪些组件。因此,如果您使用UUID,则需要在数据级别而不是UI级别进行优化',
我想问一下,是否有人知道如何在真实的代码中应用它,例如,我们有一个上下文组件,它有一个对象数组,另一个组件通过这个数组进行Map,我们如何使用uuid()或任何其他包来应用它。

hgc7kmma

hgc7kmma1#

虽然在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生成的id之后为空:
And code sandbox code

nfeuvbwi

nfeuvbwi2#

您可以安装react-uuid

import uuid from 'react-uuid'

const array = ['one', 'two', 'three']

export const LineItem = item => <li key={uuid()}>{item}</li>

export const List = () => array.map(item => <LineItem item={item} />)

or you can use crypto.randomUUID() directly without pckgs

相关问题