setState并避免改变现有属性

时间:2017-04-22 03:01:40

标签: javascript reactjs ecmascript-6 lodash

我做

const user = this.state.user;
this.setState({
  user: {
   id
  }
});

但我的其他财产已经消失了。曾经有过

user.name, user.gender等。如何保留现有对象的副本并更新状态?使用lodash的克隆方法?

2 个答案:

答案 0 :(得分:0)

你不需要lodash去做。尝试

let updatedUser = Object.assign({}, this.state.user, {
  id
})

this.setState({
  user: updatedUser
})

答案 1 :(得分:0)

您可以查看Object.assign来解决此问题。

但是,我建议您使用immutability-helper

import update from 'immutability-helper';

const user = this.state.user;
const updatedUser = update(user, {
  id: {$set: 7}
});

this.setState({user: updatedUser});

此处,$setupdate函数为user.id设置新值的命令。用户对象中的其余属性将保持不变。

虽然语法需要一点点习惯,但一旦理解它就会容易得多。对于简单的状态对象,Object.assign没问题。

但是,如果您的状态对象非常复杂和深入,克隆​​整个状态可能会影响性能。这是不变性助手帮助的地方。