我正在观看Dan Abramov关于Egghead的Redux教程,他做了一些让我感到困惑的事情。作为一项学习练习,他让观众重建createStore
抽象。 createStore
提供的一种方法是subscribe
,它会添加侦听器以侦听商店更改。
这里有一个重要的缺失部分。我们还没有提供取消订阅听众的方法。我们只是从Subscribe方法返回一个函数,而不是添加专用的Unsubscribe方法,该函数将从侦听器的数组中删除此侦听器。
因此,他用来添加/删除监听器的代码是:
const subscribe = (listener) => {
listeners.push(listener);
return () => {
listeners = listeners.filter(l => l !== listener);
};
};
我有点明白,这允许你使用一个函数进行添加/删除,这是可能的,因为如果你传递subscribe方法已经订阅的监听器的名称,过滤器将删除它,我 not 理解为什么这会返回箭头函数而不是一组侦听器。如何/何时调用此返回函数?
答案 0 :(得分:7)
如何/何时调用此返回函数?
应该删除侦听器时调用此函数。究竟应该发生这种情况取决于应用程序。
调用很简单:
const remove = subscribe(myListener);
// later:
remove();
我不明白为什么这会返回一个箭头函数而不是一个侦听器数组。
这将允许任何订阅者搞乱侦听器数组,或者要求每个订阅者实现相同的取消订阅逻辑。