0

我可以在商店中保存一个对象并通过克隆和替换该对象来对其进行变异,例如:

$store = someObject; // Notifies subscribers if someObject was not already the value of the store
someObject.property = newValue;
$store = {...someObject}; // Notifies subscribers because we're assigning a new object

但是,这不适用于类的实例,因为原型(方法)没有被复制。商店以对象而不是类的实例结束。

我正在寻找一种在突变后触发通知的方法,例如:

$store = someClassInstance;
someClassInstance.mutateSomeProperties();
store.forceUpdate();

我的实验调用store.set()store.update()未能通知订阅者更改,大概是因为(如文档中所述)这仅在设置的值更改时发生。虽然我对这个似乎与此相矛盾的PR感到困惑,但给了我一些希望,有一种方法可以实现这一目标。

4

1 回答 1

0

我想我有一个不太老套的解决方案,但如果这是我认为在商店 API 中支持此功能的唯一方法会更好。

我现在正在做的是将实例对象包装在代理对象中并替换后者。这意味着我有一个额外的取消引用,但这并不是那么糟糕:

$store = {theInstance: someClassInstance}; // Notifies subscribers
someClassInstance.mutateProperties();
$store = {theInstance: someClassInstance}

并使用store

$store.theInstance.doStuff();

尽管如果您遇到与undefined. 在这种情况下,请$store && $store.theInstance在使用前检查。

于 2020-03-27T11:52:40.710 回答