【发布时间】:2018-04-24 11:23:55
【问题描述】:
当我从套接字获得新的转储时,我需要替换可观察对象中的数据:
class Store {
@observable data = { foo: 'bar' }
replaceFromDump(newData) {
this.data = newData
}
}
const store = new Store()
store.replaceFromDump({ foo: 'bar' })
// { foo: 'bar' } can be a huge amount of JSON
但是,我注意到当数据对象扩展时性能会受到影响,这可能是因为 MobX 会在任何地方触发反应,即使某些属性/值相同。
有没有“更聪明”的方法? - 我认为 f.ex 只替换对象的受影响部分会比替换整个 observable 更好?
我在这里做了一个小演示来解释我的意思:https://jsfiddle.net/yqqxokme/。
替换对象会引起新的反应,即使数据完全相同(预期)。但我确信有一种方法可以只改变数据对象的受影响部分,就像在 merge() 函数中一样。
【问题讨论】:
-
你试过extendObservable吗?
-
由于数据对象本身曾经在客户端修改过自己,还是总是作为一个整体使用/替换?在后一种情况下,您可以使用
@observable.ref避免递归创建可观察对象,另请参阅修饰符文档 -
@mweststrate 数据仅在第一次和重新连接时作为转储出现,然后在我们合并到现有数据对象的应用程序生命周期中以小块形式出现。但是只有在对现有(过时的)可观察数据注入新转储时,性能损失才会明显
-
@David,感谢您对答案的反馈,因为赏金即将到期
标签: javascript reactjs mobx