【问题标题】:Unable to update form field in react via prevState无法通过 prevState 更新响应中的表单字段
【发布时间】:2025-12-31 10:30:16
【问题描述】:

我有一个状态变量:

constructor(props) {
        super(props)
        this.state = {
            fields: {
                applicantName: '',
                applicantType: '',
                applicantAddress: '',
                applicantContact: '',
                buildingName: '',
                buildingAddress: '',
                area:'',
            }
        }

        this.handleChange = this.handleChange.bind(this)
        this.handleSubmit = this.handleSubmit.bind(this)
    }

我有一个功能:

handleChange(event) {
    this.setState((prevState) => {
        fields: {
            ...prevState.fields,     //Unexpected token ..
            {
                event.target.name: event.target.value,
            },
        }
    });
}

我怎么在这里看不到任何类型的语法...但是我的模块构建失败并且它在“...”附近显示语法错误

【问题讨论】:

  • 仍然是您遇到的问题还是错字是问题?
  • 错字只是在这里的问题中,我已经更正了.....但这不是问题
  • this.state = { } 在构造函数中对吗?
  • @PraveenRaoChavan.G 是的,我已经更新了问题
  • 完整代码在这里pastebin.com/LzVRTbdP

标签: reactjs


【解决方案1】:

你需要返回Object

handleChange(event) {
// note here  => ({
    this.setState((prevSate) => ({
        fields: {
            ...prevState.fields,
//and there ..
                [event.target.name]: event.target.value
        })
    });
}

更新

根据 Abdullah 的建议,最好使用 ...prevState 表示状态:

handleChange(event) {
// note here  => ({
    this.setState((prevSate) => ({
        // note change here
        ...prevState,
        fields: {
            ...prevState.fields,
//and there ..
                [event.target.name]: event.target.value
        })
    });
}

更新 2

基于 PraveenRaoChavan 评论:

错字修正: 需要使用event 而不是e

【讨论】:

  • 这不是正确的解决方案。如果状态有更多的数据而不是fields
  • 这种方法是正确的。你已经根据我的编辑了你的答案。这是不正确的
  • 啊。好的,我将删除我的答案。请使用...prevState 更新您的答案 PS:已删除
  • @dbvt10 它仍然无法正常工作......请在此处查看我的完整代码pastebin.com/LzVRTbdP
  • 这里的e是什么?不应该是事件吗? (或者我们可以这样写!!)
【解决方案2】:
handleChange(event) {
    this.setState(prevState => ({
        fields: {
            ...prevState.fields,
            {
                event.target.name: e.target.value,
            },
        }
    }));
}

【讨论】:

  • 这不是正确的解决方案。如果声明更多的键、值对而不是fields
【解决方案3】:

你有错别字

改变

this.setState((prevSate) => { }

this.setState((prevState) => { }

【讨论】: