【问题标题】:React + mobx object keeps getting updatedReact + mobx 对象不断更新
【发布时间】:2018-01-16 19:53:46
【问题描述】:

我遇到的问题是我有一个在整个类中使用的对象,该对象存储在可观察值下,我有另一个对象存储为第一个对象的备份,并且该值是不可观察的,并且它在构造函数中创建(如果我将外部构造函数创建为不可观察的值,则同样的问题)。例如:

some class{

    @observable people = some object value

    constructor(props){
        super(props)
        this.oldValue = {}
    }

    componentWillReceiveProps(){
        this.oldValue = this.people
    }

}

现在如果 people 对象被更新,假设值发生了变化,this.oldValue 也会因为某种原因被更新,甚至认为它不应该被更新。如果我将this.oldValue 变量设置为一个字符串,然后像this.oldValue = object.name 这样给出值,那么旧值将不会按预期更新。

什么会导致问题?为什么值被设置为对象而不是字符串时被更新?

【问题讨论】:

  • 重新阅读您的问题后,您的伪代码没有多大意义。你能发布一个物理证明这个问题的sn-p吗?
  • 代码中的结构与我的伪代码中的结构相同。对不起,我不能发布任何代码,因为课程很大并​​且由于工作版权
  • this.oldValue 分配给this.people 应该取消对可观察属性的引用,并且只复制一次值。文档很好地解释了这一点here。如果没有一些实际代码,无法进一步评论。
  • 嗯,这就是我的想法,但事实并非如此。看起来它使用引用制作了同一个对象的副本,只是使用了一个不同的变量,该变量得到了更新以及原始值

标签: reactjs mobx


【解决方案1】:

通过克隆对象而不是分配对象解决了我的问题。例如,而不是:

this.oldValue = this.currentValue

我使用Lodash库克隆:

this.oldValue = _.clone(this.currentValue)

因此,即使 this.currentValue 值被更新,this.oldValuevalues 仍保持不变以供将来参考

我认为我的问题是我创建了具有相同引用的相同对象,以使用不同的变量进行更新

【讨论】:

    【解决方案2】:

    不确定您要达到什么目的,但我认为重新分配 observable 值不是 mobx 设计的方式。

    如果您的oldValue 需要从observable 数据派生,请使用computed

    Mobx 作者本人建议不要复制 observable 数据并将其存储在本地:https://mobx.js.org/best/pitfalls.html#don-t-copy-observables-properties-and-store-them-locally

    【讨论】:

    • 嗯,我想不出任何其他方法来拥有正在更新的对象的旧值,因为我需要原始值来检查更改,但我不能这样做对象不断更新
    • 它说复制可观察数据不会被跟踪,这就是我需要的,但它仍在跟踪和更新中
    猜你喜欢
    • 2021-04-24
    • 1970-01-01
    • 2019-08-30
    • 2021-02-25
    • 2016-11-04
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多