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

使用React删除待办列表项的功能实现咨询

要实现待办项删除功能,需要通过父子组件传参的方式完成,逻辑如下:

步骤1:修改ListItem子组件配置

删除逻辑由持有整个待办列表的父组件实现,子组件仅需要通过props接收删除回调,点击按钮时触发回调并传递当前待删除项的信息即可。
修改后的子组件代码:

import { Item } from '../../types/item';
import { useState } from 'react';

type Props = {
  item: Item,
  // 新增删除回调参数,接收当前要删除的item作为入参
  onRemove: (item: Item) => void
}

export const ListItem = ({ item, onRemove }: Props) => {
  const [isChecked, setIsChecked] = useState(item.done);

  return (
    <C.Container done={isChecked}>
        <input
          type="checkbox"
          checked={isChecked}
          onChange={e => setIsChecked(e.target.checked)}
        />
        {/* 点击时触发传入的onRemove回调,传递当前item */}
        <button onClick={() => onRemove(item)}><img src="./remove" alt="删除"/></button>
      <label>{item.name}</label>
    </C.Container>
  );
}
步骤2:父组件实现删除逻辑

父组件存储了完整的待办列表数组,只需要实现过滤逻辑,再把删除方法传给所有ListItem组件即可。父组件示例代码:

import { useState } from 'react';
import { Item } from '../../types/item';
import { ListItem } from './ListItem';

export const TodoList = () => {
  // 父组件存储完整待办列表,你的项目中可能从接口或者其他地方获取
  const [todoList, setTodoList] = useState<Item[]>([
    { id: 1, name: '学习React', done: false },
    { id: 2, name: '写待办列表', done: true }
  ]);

  // 实现删除逻辑,过滤掉id匹配的待办项
  const handleRemoveItem = (targetItem: Item) => {
    setTodoList(prevList => prevList.filter(item => item.id !== targetItem.id))
  }

  return (
    <div>
      {todoList.map(item => (
        <ListItem 
          key={item.id} 
          item={item} 
          // 把删除方法传给子组件
          onRemove={handleRemoveItem}
        />
      ))}
    </div>
  )
}

补充说明:如果你的Item类型没有唯一id字段,也可以用数组下标作为删除标识,这种情况下只需要把回调的入参改成下标即可,但是更推荐给每个待办项加唯一id,避免数组顺序变化时出现删错项的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:09:00