【问题标题】:Implementing Redux Store from Scratch从零开始实现 Redux Store
【发布时间】:2016-08-17 07:25:16
【问题描述】:

我正在关注 Redux tutorial series。在那篇文章中,Dan Abramov 展示了如何从头开始创建 Redux 存储。这是这段代码

const createStore = (reducer) => {
 let state;
 let listeners = [];

 const getState = () => state;

 const dispatch = (action) => {
   state = reducer(state, action);
   listeners.forEach(listener => listener());
 };

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

 dispatch({});

 return {getState, dispatch, subscribe};
}

dispatch 函数中的以下行是我感到困惑的地方,

listeners.forEach(listener => listener());

我知道它会遍历侦听器数组中的所有元素并将每个元素传递给箭头函数。

但这有什么作用listener()

【问题讨论】:

  • 您将数字推送到 listeners 数组,并尝试将该数字作为函数调用。
  • 你能解释一下 dispatch 函数里面的那行吗?
  • 您应该使用函数订阅store。一旦你发送了一个action,所有的监听函数都会被调用。
  • 好的,@Dieterg

标签: javascript ecmascript-6 redux react-redux


【解决方案1】:

listeners 是一个函数数组,因此listeners.forEach(listener => listener()); 遍历侦听器函数并使用listener() 调用它们。

【讨论】: