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

React入门疑问:为何todolist.map()无法在页面迭代渲染?

React待办列表map渲染失败的问题修复

你的代码存在四个核心问题,导致map方法无法正确渲染内容:

  • 直接修改State数组:React要求state是不可变的,不能用todolist.push(todo)直接修改原数组,这种操作不会触发组件重新渲染。必须通过settodolist方法,基于原数组创建新数组来更新state。
  • Map回调未返回JSX元素:你在map里用了大括号{}包裹逻辑,但没有显式返回<h3>元素,React无法识别要渲染的内容。
  • 未正确引用变量:<h3>item</h3>里的item是字符串字面量,并非变量,需用{}包裹才能显示实际的待办文本。
  • 缺少列表元素的key属性:React渲染列表时要求每个元素有唯一key,这是性能优化和避免警告的必要操作。

修复后的完整代码:

import { useState } from "react";

export default function Todo(){
    const [todo, setTodo] = useState("");
    const [todoList, setTodoList] = useState([])

    const handleTodo = (event) => {
        setTodo(event.target.value)
    }
    const handleSubmit = (event) => {
        event.preventDefault();
        // 创建新数组更新state,避免直接修改原数组
        setTodoList([...todoList, todo]);
        setTodo("")
    }
    return(
        <div>
        <form onSubmit={handleSubmit}>
            <div>
                <input type="text" value={todo} onChange={handleTodo} />
                <button type="submit">Add</button>
            </div><br/>
        </form>
        {todoList.map((item, index) => (
            // 添加key,正确渲染变量
            <h3 key={index}>{item}</h3>
        ))}
        </div>
    )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:35:21