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

React报错Objects are not valid as a React child原因排查求助

问题原因

你遇到的报错是因为代码中直接尝试将存储对象的数组list作为React子元素渲染,React原生不支持直接渲染普通对象,触发了类型校验报错。
具体错误位置在组件返回值的第一行:

return (
    <>
   {list} // 这里就是错误触发点,list是对象数组,不能直接渲染
   <form onSubmit={handleSubmit}>
       {/* 其余表单代码 */}
   </form>

    {generateTasks}
    </>
)

你已经封装了用来渲染列表的generateTasks变量,完全不需要额外输出原始的list数组,删掉该行即可解决报错。

修复后的完整代码

import { useState } from 'react';

function DisplayTasks() {
  let taskList = [{id: "1234", task: "Bake a cake"}];
  const [list, setList] = useState(taskList)
  const [input, setInput] = useState("");

  const handleSubmit = e => {
    e.preventDefault();
    let newNum = Math.floor(Math.random() * 10000);
    let stringNum = newNum.toString()
    setList([...list, {id: stringNum, task: input}])
    setInput("")
  }

  const handleChange = e => {
    setInput(e.target.value);
  }

  const generateTasks = list.map((item) =>{
    // 优化点:这里不需要额外包裹空标签,key直接绑定在最外层元素即可
    return (
      <div key={item.id}>
        <h1>{item.task}</h1>
      </div>
    )
  })
  return (
    <>
      <form onSubmit={handleSubmit}>
        <label htmlFor="tasktitle"></label>
        <input name="tasktitle" onChange={handleChange} placeholder="Add a Task" value={input}></input>
        <button type="submit">Click here to add task</button>
      </form>
      {generateTasks}
    </>
  )
}

额外优化建议

  • 列表map遍历的时候不需要在外层额外包裹React空标签,把key属性绑定到遍历返回的最外层DOM元素上即可
  • 提交任务前可以加输入非空校验,避免添加空任务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:54:03