我遇到的问题是我有一个在整个类中使用的对象,它存储在可观察值下,我有另一个对象存储为第一个对象的备份,并且值是不可观察的,它在构造函数中创建(如果我将外部构造函数创建为不可观察的值,则会出现同样的问题)。例如:
some class{
@observable people = some object value
constructor(props){
super(props)
this.oldValue = {}
}
componentWillReceiveProps(){
this.oldValue = this.people
}
}
现在,如果人物对象得到更新,让我们说值已更改,this.oldValue
也会因为某些原因而更新,甚至认为它不应该更新。如果我将this.oldValue
变量设置为字符串,然后像this.oldValue = object.name
那样给出值,则旧值将不会按预期更新。
什么可能导致问题?为什么在设置为对象而不是字符串时更新值?
答案 0 :(得分:0)
通过克隆对象而不是分配对象来解决我的问题。例如,而不是:
this.oldValue = this.currentValue
我使用Lodash库来克隆:
this.oldValue = _.clone(this.currentValue)
因此,即使更新了this.currentValue
值,this.oldValue
值也会保留未来的参考值
我认为我的问题是我使用相同的引用创建了具有不同变量
的更新的相同对象答案 1 :(得分:0)
不确定您要实现的目标,但我认为重新分配observable
值不是mobx
设计的方式。
如果您的oldValue
需要从observable
数据中获得,请使用computed
。
Mobx作者自己建议不要复制可观察数据并将其存储在本地:https://mobx.js.org/best/pitfalls.html#don-t-copy-observables-properties-and-store-them-locally。