javascript - 使用 setState 使用输入值更新本地状态中对象项的值

标签 javascript reactjs redux react-redux

将输入值与对象项的先前值更新(连接)的正确方法是什么?

考虑下面的例子:

本地州

this.state = { model: 'ggg'}

在处理程序中

handleChange = (event) => {
            this.setState({...this.state,
                [event.target.name]: event.target.value});
        };
render() {

        const {values} = this.state;
        return (
<TextField
        id="model"
        label="Model"
        name="model"
        value={this.state.model}
        onChange={evt => this.handleChange(evt)}/>
)
    };

这是在我输入字符并将模型更新为“ggga”“gggaaa”时更新模型。

但我现在想更新我的对象的状态。

本地州

this.state = {values: { model: 'ggg'}}

我尝试过,

handleChange = (event) => {
this.setState(prevState => ({
  values: {
    ...prevState.values,
    [event.target.name]: event.target.value
  },
}))}

<TextField
    id="model"
    label="Model"
    name="model"
    value={this.state.values.model}
    onChange={evt => this.handleChange(evt)}/>

输出:“ggga”,“gggq”

这没有给我预期的输出。 有人可以建议一个解决方案吗?

谢谢

最佳答案

如果您所在的州是

{
    values: { 
        model: 'ggg'
    }
}

,并且您的值中有多个属性(更多的是 model),并且您只想更新 model,我建议您这样做:

this.setState({
    values: {
        ...this.state.values,
        model: event.target.value,
    } 
});

如果您所在州有其他属性,这也适用。作为@corrado4eyes,您不需要传递之前的状态。

关于javascript - 使用 setState 使用输入值更新本地状态中对象项的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56731648/

相关文章:

javascript - React Native 中的 Redux Form,带有 Value 的 onChangeText 无法正常工作

javascript - 使用dispatch()时没有调用Reducer

javascript - 为什么我的 javascript (node.js) 给了我不正确的时间戳?

javascript - Angular6 中编辑表单的预选选项(下拉菜单)

reactjs - 用 jest enzyme 测试 react router v4

reactjs - 如何让 React 响应媒体查询?

redux - 如何从共享首选项设置 initialState?

ajax - AngularJS 使用 $http.get 请求以特定顺序传递参数数据

javascript - 当使用 router.push 进行转换时,将 props 从一个组件传递到另一个组件

node.js - Next.js 使用 JWT 进行身份验证