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

React父子组件数组传递:子组件过滤后返回更新数组问题

React父子组件数组删除功能修复方案

原代码存在的问题

  • props传递不匹配:Parent传的是todoList,但Child接收的是todoData,导致Child拿不到正确数据
  • 状态管理错误:Child私自维护数组状态,删除操作无法同步到Parent的数组,页面不会更新
  • 渲染逻辑错误:在Parent的循环里渲染整个Child组件,每个todo项都重复显示所有删除按钮
  • 数据取值错误:Child里用obj.props.id取id是错误写法,数组元素直接取obj.id即可

修改后的Parent组件

import { useState } from 'react';
// 请自行导入check图片和Child组件

const Parent = () => {
  const todoData = [
    { id: 0, todoname: "Study", todotoday: "Completing CSS today" },
    { id: 1, todoname: "Coding", todotoday: "Leetcode 2 Problems" }
  ];
  const [myArray, setMyArray] = useState(todoData);

  // 父组件定义删除逻辑,统一管理数组状态
  const handleDelete = (id) => {
    const newArray = myArray.filter(item => item.id !== id);
    setMyArray(newArray);
  };

  return (
    <div className="todomain">
      {myArray.map((obj) => {
        return (
          <div className="todobox" key={obj.id}>
            <div className="checkcont">
              <img src={check} alt="Check" className='chkbtn btn' />
            </div>
            <h2 className="head">Todo: {obj.todoname}</h2>
            <h3 className="todocont">{obj.todotoday}</h3>
            <div className="todoboxbtn">
              {/* 给Child传递当前todo的id和删除回调 */}
              <Child todoId={obj.id} onDelete={handleDelete} />
            </div>
          </div>
        );
      })}
    </div>
  );
};

export default Parent;

修改后的Child组件

// 请自行导入del图片

const Child = ({ todoId, onDelete }) => {
  return (
    <div className="todoicon">
      <div className='todobtn'>
        <img 
          src={del} 
          alt="Delete" 
          className='deleteBtn btn' 
          onClick={() => onDelete(todoId)} 
        />
      </div>
    </div>
  );
};

export default Child;

核心修改说明

  • 把数组状态统一放在Parent管理,确保数据唯一来源,删除操作后能同步更新页面
  • Child不再需要接收整个数组,只接收当前todo的id和父组件的删除回调,点击按钮时触发回调通知父组件执行删除
  • 每个todo项只渲染一个Child(对应一个删除按钮),解决了重复渲染的问题

内容的提问来源于stack exchange,提问作者Akash Kr. Das

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:52:40