【发布时间】:2019-07-04 04:27:03
【问题描述】:
我想以组件状态存储类的自定义实例,但我不知道如何以正确的方式更改数据
在更改实例之前,我会克隆对象。
例如,我有一个带有一些属性的自定义对象:
this.state={
user: new User();
}
当我需要更改数据时
const user = _.cloneDeep(this.state.user);
user.setSettings(/*some object of settings*/)
this.setState({user});
每次都使用 cloneDeep 可以吗?也许有更好的方法来更改数据并且不破坏反应生命周期?
【问题讨论】:
-
您在渲染方法中使用
this.state.user吗?如果不是,您不应该将其存储在组件的状态中(将其放在其他地方,例如this.user,然后您可以随意更改它)。即使是这样,您最好将其存储在其他地方,然后将渲染所需的信息复制到您的组件状态中。 -
(另外,如果您显示更多组件的代码,可能会更容易提出更好的解决方案!)
-
是的,我在渲染中使用它,有时我需要用当前值检查以前的值。如果没有克隆,生命周期就会中断,我无法比较
componentDidUpdate中的值
标签: javascript reactjs oop ecmascript-6 ecmascript-5