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

React中获取输入值并添加至列表功能失效,求排查问题

问题排查与修复

你的代码存在三个关键问题,直接导致功能失效:

1. 状态类型误用

list初始定义为数组,但trackList函数里把它赋值成了输入框的字符串值,破坏了原本的数组类型,后续基于数组的操作逻辑全部出错。应该单独用一个状态存储输入框的实时内容,比如inputValue。

2. 添加列表项逻辑错误

addTodos里尝试通过[...list]创建新数组,但此时list已经是字符串,展开后会得到单个字符组成的数组,完全不符合添加完整输入内容的需求。正确逻辑是把当前输入值追加到todos数组末尾。

3. map渲染未返回元素

todos.map的回调函数里没有返回<li>元素,React无法识别要渲染的内容。要么显式添加return,要么把大括号改成小括号让箭头函数自动返回。


修复后的完整代码

import { useState } from "react";
import "./App.scss";

function App() {
    // 单独用inputValue存储输入框的值,原list状态可删除
    const [inputValue, setInputValue] = useState("");
    const [todos, setTodos] = useState([]);

    const trackList = (e) => {
        setInputValue(e.target.value);
    };

    const addTodos = () => {
        // 过滤空输入,避免添加空项
        if (!inputValue.trim()) return;
        // 将新输入值追加到现有todos数组
        setTodos([...todos, inputValue]);
        // 添加完成后清空输入框
        setInputValue("");
    };

    return (
        <div className="App">
            <input onChange={trackList} type="text" value={inputValue} />
            <button onClick={addTodos}>Add</button>
            <ul>
                {todos.map((todo, index) => (
                    // 给列表项添加唯一key,符合React渲染规范
                    <li key={index}>{todo}</li>
                ))}
            </ul>
        </div>
    );
}

export default App;

额外优化:给input加上value={inputValue}转为受控组件,确保输入框值与状态完全同步;列表渲染时添加key属性,避免React渲染警告。

内容的提问来源于stack exchange,提问作者jj-ammar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 17:12:16