1

我有一个派生商店,例如:

const filter = derived([a, b, c, d, e], callback, null);

function callback([$a, $b, $c, $d, $e], set) {
  ....
  set(...);
  return() = {
    ....
  };
};

除了缓存存储值之外,是否有一种简单的方法可以找出 [a..e] 的哪个存储触发回调中的回调。例如:如果存储“c”更新,我喜欢用 set(null) 重置。

使用闭包缓存存储值的示例代码:

function cache() {
  let cached;
  return ([$a, $b, $c, $d, $e], set) => {
    ....
    set(...);
    return() = {
      if (cached !== $c.value) {
        cached = $c.value;
        set(null);
      };
    };
  };
};

function filterStore() {
  const callback = cache();
  const { subscribe } = derived([a, b, c, d, e], callback, null);
  return {
    subscribe,
  };
};

const filter = filterStore();
4

1 回答 1

0

我不知道你会如何纯粹使用派生商店来做到这一点,但是当我听到“追溯导致突变的原因”时,我的第一个想法是研究行动(à la VueX/Mobx)。

这意味着您的派生存储实际上是可写的,并且您将编写一个相应地更新所有存储的服务/操作: 

const initMySecondStore =  writable(0)

const mutateCandSecondStore = () => {
  c.set(value)
  mySecondStore.set(null)
}

const mutateAandSecondStore = () => {
 c.set(value)
 mySecondStore.update(updateMeDifferently)
}

然后在您的 UI 中相应地调用这些操作。

对于不完全依赖于其他商店状态的东西,我不会使用派生商店。

于 2020-09-09T11:17:17.680 回答