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

How*_*ods 7 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);
  };
};
Run Code Online (Sandbox Code Playgroud)

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

Fel*_*ing 7

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

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

调用很简单:

const remove = subscribe(myListener);
// later:
remove();
Run Code Online (Sandbox Code Playgroud)

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

这将允许任何订户弄乱监听器阵列,或者要求每个订户实现相同的取消订阅逻辑.

  • @sabman:由于我不是图书馆的创建者,我不能说为什么这个解决方案比另一个更受欢迎. (2认同)