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

React中跨组件传递useState的set函数以实现子组件删除列表项的问题

解决React子组件修改父组件状态的问题

嘿,我来帮你搞定这个问题!你现在遇到的核心点是React的单向数据流规则:子组件不能直接修改父组件的状态,得通过父组件传递过来的函数来触发状态更新。下面我一步步给你讲怎么改:

步骤1:在父组件里封装删除逻辑

首先在index.js的Items组件里,写一个专门处理删除的函数,用filter过滤掉要删除的项,然后调用setItems更新状态。这里推荐用函数式更新(给setItems传一个以旧状态为参数的函数),这样能确保我们总是基于最新的状态来修改:

import React,{useState} from 'react'
import {List} from './list'
import ItemList from './ItemList'
function Items(){
 const [items,setItems] = React.useState(List);

 // 新增的删除函数
 const handleRemoveItem = (idToRemove) => {
   setItems(prevItems => prevItems.filter(item => item.id !== idToRemove));
 }

 return (
 <>
 <h1>{items.length} Items in total</h1>
 {items.map((itemArr)=>{
   // 把删除函数作为props传给ItemList
   return <ItemList {...itemArr} onRemove={handleRemoveItem}/>
 })}
 </>
 )
}
ReactDom.render(<Items />,document.getElementById('root') )

步骤2:子组件接收并调用删除函数

接下来修改ItemList.js,接收父组件传过来的onRemove函数,然后在按钮点击时调用它,把当前项的id传过去就行:

import React from 'react'
function ItemList(props) {
 const {id, obj, onRemove} = props;

 // 也可以直接把onClick写成() => onRemove(id),省掉这个函数
 const removeItem = () => {
   onRemove(id);
 }

 return (
 <div>
 <h3>{id}</h3>
 <h4>{obj}</h4>
 <button onClick={removeItem}>Remove</button>
 </div>
 )
}
export default ItemList

为什么要这么做?

React的单向数据流让组件的状态变化更可追踪:父组件掌管状态和更新逻辑,子组件只负责渲染UI和触发用户交互。这样你的代码会更清晰,以后维护或者扩展功能也更方便。

现在点击按钮应该就能正常删除对应的列表项啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:27:36