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

时间:2016-02-10 00:24:40

标签: javascript ecmascript-6 redux

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

然后他说:

  

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

因此,他用来添加/删除监听器的代码是:

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

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

1 个答案:

答案 0 :(得分:7)

  

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

应该删除侦听器时调用此函数。究竟应该发生这种情况取决于应用程序。

调用很简单:

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

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

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