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

React报错:列表子元素需唯一key属性,排查无果求解答

排查React列表key警告问题

你遇到的警告是因为在tokens.map循环中,存在没有唯一key的列表子元素。具体来说:

在你的代码里,tokens.map中当watchlist.includes(coin.id)不成立时,返回了一个空的Fragment(<></>),这个元素没有设置key属性。React要求列表渲染的每一个子元素(包括空元素)都必须拥有唯一的key,否则就会触发该警告。

修复方案

方案1:给空Fragment添加key

将空返回部分改为带key的完整Fragment:

{tokens.map((coin) => {
  if (watchlist.includes(coin.id))
    return (
      <div key={coin.id} className={classes.coin}>
        {/* 现有内容 */}
      </div>
    );
  else return <React.Fragment key={coin.id} />;
})}

注意:短语法的<></>无法添加key,必须使用完整的<React.Fragment>标签。

方案2:先过滤再映射(更推荐)

先筛选出在watchlist中的coins,再进行map渲染,避免返回空元素:

<div className={classes.watchlist}>
  <span style={{ fontSize: 15, textShadow: "0 0 5px black" }}>
    Watchlist
  </span>
  {tokens
    .filter(coin => watchlist.includes(coin.id))
    .map((coin) => (
      <div key={coin.id} className={classes.coin}>
        <span>{coin.name}</span>
        <span style={{ display: "flex", gap: 8 }}>
          {symbol} {numberWithCommas(coin.current_price.toFixed(2))}
          <AiFillDelete
            style={{ cursor: "pointer" }}
            fontSize="16"
            onClick={() => removeFromWatchlist(coin)}
          />
        </span>
      </div>
    ))}
</div>

这种方式更简洁,也从根源上避免了空元素导致的key问题,同时减少了不必要的渲染分支。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 10:25:41