javascript - setState 不合并值

标签 javascript reactjs

我在 React 中使用以下代码来更新状态。 state 最终应该是这样的:

this.state.output = {
 'abc':{
     value: 10
 },
 'cde':{
     value: 20
  }
  // new values are added and old kept (if not overwritten)
}

我的处理程序:

 handleChange = (data) => {
    this.setState(prevState => {
      return {
        output: {
          [data.id]: { ...data },
        },
      }
    })
  }

当数据以新的data.id传入handleChage时,output并没有添加新的key,而是完全替换了它的所有内容

this.state.output = {
  'new':{
     value: 2
   },
}

我还需要保留之前的 key 。我的代码有什么问题?

最佳答案

因为您忘记添加其他属性及其值,所以像这样更新对象:

handleChange = (data) => {
    this.setState(prevState => {
        return {
            output: {
                ...prevState.output,      // notice this
                [data.id]: { ...data },
            },
        }
    })
}

或者简单地说:

handleChange = (data) => {
    this.setState(prevState => ({
        output: {
            ...prevState.output,
            [data.id]: { ...data },
        },
    })
)}

关于javascript - setState 不合并值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50970297/

相关文章:

javascript - 使用 Javascript onClick 更改 div 内容

node.js - 语法错误 : Unexpected token import- Node. js

javascript - 您可能返回了未定义的数组或其他无效对象

javascript - 如何在用户将鼠标悬停在文本上时删除文本

java - MapReduce 返回 NaN

javascript - axios 可以配置为使用 HTTP/1.1 吗?

javascript - Phonegap 加载 InAppBrowser 和 url 更改

reactjs - 为什么我不能在 ReactJS 中的另一个标签之外使用 <hr/> 标签?

javascript - 使用 useInterval 钩子(Hook)取消异步请求

reactjs - 如何将切换绑定(bind)到单击的元素以在 react 中映射数据