javascript - setstate - 动态键值 - 覆盖而不合并状态

标签 javascript reactjs

我有一个嵌套状态对象,我试图动态更新,但是当我更新时,最终值被覆盖而不更新。

我当前的代码如下所示:

inputChangeHandler = (event, key) => {
  const value = event.target.value
  this.setState({
    formData: {
          [`${key}`]: {
            [event.target.id]: value
          }
    }
  })
}

当状态更新时,状态更新自(例如):

formData:{ 
    key1: {
        id: value1
    }
}

至:

formData:{ 
    key1 {
        id2: value2
    }
}

而不是:

formData:{ 
    key1 {
        id: value1
        id2: value2
    }
}

有什么想法吗?

最佳答案

overwriting not merging state

State merging is shallow. .

它修改相同的formData键。

因此,应该使用之前的 formData 状态来正确构造新的 formData 状态。

inputChangeHandler = (event, key) => {
  const value = event.target.value
  const id = event.target.id

  setState((prevState) => ({
    formData: {
      ...prevState.formData,
      [key]: {
        ...prevState.formData[key]
        [id]: value, // append id value under key
      }
    }
  }))
}

关于javascript - setstate - 动态键值 - 覆盖而不合并状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57780917/

相关文章:

javascript - Jquery 表单提交只工作一次

javascript - 面板内的 CodeMirror 编辑器

node.js - OAuth错误invalid_request : The redirect_uri is not whitelisted

javascript - 我的模态组件位于不同的文件中,我正在尝试从另一个组件打开它

PHP:使用 javascript 的一些提示从数据库中删除

javascript 在嵌套数组中查找对象

php - 如何使用 Javascript 对输入字段值求和并将其显示到 html 表中?

javascript - 未在浏览器中设置 Cookie

javascript - 如何在 React Native SectionList 中使一个部分水平呈现而其他部分垂直呈现

javascript - 在 package.json 中更改代理不起作用