You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中使用Set存储唯一元素:添加方式与遍历展示问题咨询

解决React中Set State的添加与遍历问题

嘿,我来帮你搞定这两个问题!

一、正确向Set State添加唯一元素的方式

首先要注意:React的state是不可变的,直接修改原Set不会触发组件重渲染,因为Set是引用类型,React浅比较时会认为state的引用没变化,所以不会更新。

你原来的写法存在问题:

  • items.add(input):直接修改了原Set,但React检测不到这个变化,组件不会重新渲染;
  • setItems(items.add(input)):add方法返回的是原Set本身,还是同一个引用,同样无法触发更新。

正确的做法是创建一个新的Set,包含原Set的所有元素,再添加新元素,然后更新state:

const addNumber = () => {
  // 创建新Set,复制原Set的内容
  const newItems = new Set(items);
  newItems.add(input); // Set会自动处理重复,无需额外判断
  setItems(newItems);
};

更简洁的函数式更新写法(推荐,尤其当state更新依赖于前一次state时):

const addNumber = () => {
  setItems(prevItems => new Set(prevItems).add(input));
};

二、遍历Set展示数据的方法

Set本身没有map方法,所以直接调用items.map()会报错map is not a function。你需要先把Set转换成数组,再用map渲染:

方法1:使用Array.from()

<ul>
  {Array.from(items).map(item => (
    <li key={item}>{item}</li>
  ))}
</ul>

方法2:使用扩展运算符...

<ul>
  {[...items].map(item => (
    <li key={item}>{item}</li>
  ))}
</ul>

注意:React列表渲染需要唯一的key属性,这里用Set中的元素本身作为key就可以,因为Set里的元素都是唯一的。

内容的提问来源于stack exchange,提问作者user3359964

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 16:02:28