listener() 在 Redux 存储中做什么
What listener() does in the Redux store?
我正在Egghead上观看Dan Abramov的Redux视频。在他从头开始实现 Redux 存储的视频中,他包含以下代码(大约 1:28 - https://egghead.io/lessons/javascript-redux-implementing-store-from-scratch):
const dispatch = (action) => {
state = reducer(state, action);
listeners.forEach(listener => listener());
};
所以这段代码遍历了监听器数组中的每个项目,我知道每个侦听器都需要更新,但我不明白 listener() 在做什么。这个功能从何而来?
createStore
方法都有listeners
变量。它是一个函数数组,应在存储更新时调用。您可以通过store
的subscribe
方法将自己的函数添加到listeners
中。
例如:
const store = createStore(reducer);
store.subscribe(state => console.log(state)); // add function into listeners
store.dispatch(action);
带有 console.log
的函数将在状态更改后调用。
该语法称为箭头函数,是 ECMAScript 6 的新功能。 如果没有特殊语法,该代码将如下所示:
listeners.forEach(function(listener){
return listener();
});
侦听器s 是一个函数数组。 侦听器正在使用 Array.prototype.forEach 函数进行迭代,该函数将函数作为其参数。
在该上下文中,"侦听器"是传递给 lambda 表达式的函数的变量名称。
当 Array.prototype.forEach 函数调用您的函数时,它会在迭代中传入当前项。 在此代码中,该项是一个函数,它只是被调用。
简而言之,此代码将遍历一系列函数并调用每个函数。
理解 Array.prototype.forEach 函数的 API 可能会有所帮助。 以下是文档:
Array.prototype.forEach
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
箭头函数
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
侦听是存储区中采用处理程序的方法。处理程序是一个函数,当调用时会导致 DOM 呈现:
store.listen(() => {
ReactDOM.render(
<div>{JSON.stringify(store.getState(), null, 2)}</div>,
document.getElementById('root')
);
});
我的理解是,侦听器数组由连接到 Redux 存储的不同 React 组件上的渲染函数组成。
- 使用Angular存储用户以前是否选中过复选框,然后再调用它的最佳方式是什么
- 存储数据的最佳方式是什么,以便与jquery一起使用
- 在 React JS 中,什么时候应该使用存储而不是直接操作视图的状态
- 在 Windows 现代(地铁)UI 应用中存储图像文件和音频文件的方法是什么?
- Chrome/Tampermonkey 用户脚本存储在文件系统上的什么位置
- 在JavasciptMVC中存储常量值的最佳方式是什么
- Angular:将对象存储在服务中以在视图中显示和将crud函数存储到服务器的最佳方式是什么
- 将密码存储在Javascript变量中的安全含义是什么
- listener() 在 Redux 存储中做什么
- 谷歌浏览器同步存储“获取”命令运行什么顺序
- 在 Javascript 中存储对象的当前状态的最佳实践是什么?
- Flux,ReactJS,架构的存储部分是什么
- 与 API 一起使用时,将 Date 对象存储在数据库中的最佳实践是什么
- 如果取消对本地存储的写入,会发生什么情况
- 我应该在 Laravel 5 中存储 JS 的什么位置
- 如果我存储缓存并且已达到缓存限制会发生什么
- 在 JavaScript 中存储非常大的二进制数的最佳方法是什么?
- 全局变量存储在 Node.JS 中的什么位置?节点中是否有类似窗口的对象
- 此对象的键存储的格式是什么?%00*%00_data.
- 在 Angular 2.0 应用程序中存储应用程序数据的正确方法是什么?