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

React类组件如何将子组件传递的JSON对象通过setState更新到父组件状态

问题根源

你当前的代码核心问题是键名不匹配:Form组件提交的新对象键名为input1/input2,但Data.js原始数据、Items组件渲染时读取的键名是title/details,所以哪怕状态更新了也无法正常渲染新增条目,另外Items组件遍历列表没有加唯一key会触发React警告。

修改方案

1. 修正Form.js的insertIt方法

把提交的新对象键名改成和全局统一的title、details,可选增加提交后清空输入框的逻辑:

insertIt(e){
    e.preventDefault();
    const newItem = {
        title: this.state.input1,
        details: this.state.input2,
    }
    this.props.onsubmit(newItem);
    // 提交后清空输入框,优化体验
    this.setState({
        input1: '',
        input2: ''
    })
}

2. 修正App.js的updateList方法

你原本的函数式setState写法本身是正确的,只需要补充空值校验避免插入无效数据即可:

updateList(dataa){
    // 简单校验,过滤空数据提交
    if(!dataa.title.trim() || !dataa.details.trim()) return;
    this.setState(ps=> ({
      listState: [
        ...ps.listState,
        dataa
      ]
    }));
}

可选优化:修复Items组件的key警告

修改遍历逻辑,给每个渲染条目加唯一key:

{this.props.listofitems.map((i,index)=> (
    <center key={index}>
        <h2>{i.title}</h2>
        <p>{i.details}</p>
    </center>
))}

修改完成后提交表单即可正常把新增条目追加到列表底部渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:18:00