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

React组件状态修改报错排查:toggle触发map读取undefined问题

问题排查与修复

你的问题出在toggle函数的状态更新逻辑里:

当你调用prevData.map((question) => { return question.answers.map(...) })时,你把原本的question对象直接替换成了answers数组。更新后的data数组里,每个元素不再是包含question和answers属性的对象,而是变成了纯answers数组。

后续渲染questBlocks时,elem变成了数组,自然找不到elem.answers属性,调用elem.answers.map()就会抛出Cannot read properties of undefined (reading 'map')的错误。


修复后的toggle函数

你需要在更新answers的同时,保留原question对象的所有属性,只替换answers字段:

function toggle(id) {
  setData((prevData) => {
    return prevData.map((question) => {
      // 保留原question的其他属性,只更新answers数组
      return {
        ...question,
        answers: question.answers.map((answer) => {
          return answer.id === id
            ? { ...answer, selected: !answer.selected }
            : answer;
        })
      };
    });
  });
}

额外建议

  • 尽量避免用数组索引index作为key,如果你的question对象有唯一id,改用question.id作为外层div的key,这能避免React渲染时的不必要重排。
  • 确保初始的data结构里,每个question对象都有answers数组,且每个answer都有id和selected属性,避免渲染时的潜在报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:50:13