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

React应用state渲染异常:categories状态无法正常渲染

问题原因

你在categorize函数里返回的是Map对象,但Object.keys()只能遍历普通JavaScript对象的键名,对Map类型无效,所以页面上{categories && Object.keys(categories)}没法渲染出内容。而console.log能正常显示Map,是因为浏览器控制台会专门处理Map的展示逻辑。

解决方案

有两种简单的修复方式,选一种就行:

方案1:把Map换成普通对象存储分类

修改categorize函数,用普通对象代替Map:

function categorize(data) {
  const categories = {}; // 替换new Map()为普通对象
  for (var i = 0; i < data.length; i++) {
    var item = data[i];
    var category = item.category;

    if (!categories[category]) {
      categories[category] = [];
    }
    categories[category].push(item);
  }
  return categories;
}

之后MenuSection里的Object.keys(categories)就能正常获取分类名数组,直接渲染即可。

方案2:保留Map,用Map原生方法获取键数组

如果想继续用Map,在MenuSection里改用Array.from()把Map的键转成数组:

<div>Testing: {categories && Array.from(categories.keys())}</div>
// 或者用展开运算符:
<div>Testing: {categories && [...categories.keys()]}</div>
可选优化

可以把categories的初始状态从null改成空Map或空对象,避免每次渲染都要判断categories &&:

// 用Map的话
const [categories, setCategories] = useState(new Map());
// 用普通对象的话
const [categories, setCategories] = useState({});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 23:35:08