ES6/Redux:返回一个函数来删除事件侦听器



我正在看Dan Abramov关于Egghead的Redux教程,他做了一些让我有点困惑的事情。作为一种学习练习,他让观众重建createStore抽象。createStore提供的一种方法是 subscribe ,它添加侦听器来侦听存储更改。

他接着说:

这里有一个重要的缺失部分。我们尚未提供取消订阅侦听器的方法。我们不会添加专用的取消订阅方法,而是从 Subscribe 方法返回一个函数,该函数从侦听器的数组中删除此侦听器。

所以他用来添加/删除侦听器的代码是:

const subscribe = (listener) => {
  listeners.push(listener);
  return () => {
    listeners = listeners.filter(l => l !== listener);
  };
};

我有点理解这允许您使用一个函数进行添加/删除,这是可能的,因为如果您向订阅方法传递已经订阅的侦听器的名称,过滤器将删除它,我不明白为什么这会返回箭头函数而不是侦听器数组。如何/何时调用此返回的函数?

如何/何时调用此返回的函数?

当应删除侦听器时,将调用此函数。具体何时应发生这种情况取决于应用程序。

调用很简单:

const remove = subscribe(myListener);
// later:
remove();

我不明白为什么这会返回箭头函数而不是侦听器数组。

这将允许任何订阅者弄乱侦听器数组,或者要求每个订阅者实现相同的取消订阅逻辑。

最新更新