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

React待办列表报错:passdata.map is not a function问题排查与解决

React待办列表删除操作报错:TypeError: passdata.map is not a function 解决方法

错误原因

在Form组件的del函数中,你连续执行了两次setVal:

  • 第一次通过filter方法过滤数组,得到删除指定项后的新列表
  • 第二次直接把val设置成了空字符串""

当val变成字符串后,传递给OutputData组件的passData不再是数组,而字符串没有map方法,因此触发了TypeError。

解决方法

删除del函数里多余的setVal("")语句,只保留过滤数组的逻辑即可。同时可以优化输入框的双向绑定,避免输入状态异常。

修改后的Form组件代码

import React, { useState } from "react";
import { OutputData } from "./OutputData";

export const Form = () => {
  const [data, setData] = useState("");
  const [val, setVal] = useState([]);

  const changed = (event) => {
    setData(event.target.value);
  };
  const clicked = () => {
    setVal((oldVal) => {
      return [...oldVal, data];
    });
    setData(""); // 改为空字符串,避免输入框残留空格
  };
  const del = (id)=>{
     setVal((newVal)=>{
      return newVal.filter((val,index)=>{
        return id !== index;
      });
     });
     // 移除错误的setVal("")语句
  }


  return (
    <div>
      <div>
        <h1>To Do List</h1>
        <input type="text" onChange={changed} value={data} /> {/* 加上value绑定,实现双向控制 */}
        <button onClick={clicked}>
          <span>+</span>
        </button>
      </div>
      <div>
        <OutputData passData={val} del={del}></OutputData>
      </div>
    </div>
  );
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:22:45