javascript - React redux 的 #applyMiddleware 如何通过返回 #createStore 而不是 store 来确保中间件仅应用一次?

标签 javascript reactjs redux react-redux

更改后的签名如何阻止您多次应用中间件?它返回一个新的#createStore,但是这个方法可以在另一个#applyMiddleware中再次用作参数,就像可以再次使用store一样,从而导致重复的中间件。

To ensure that you may only apply middleware once, it operates on createStore() rather than on store itself. Instead of (store, middlewares) => store, its signature is (...middlewares) => (createStore) => createStore.

最佳答案

问得好!我也不太明白这是如何明显的,但我认为它的工作原理大致如下:

  1. applyMiddleware()正如您所指出的,接受 createStore() 函数。每次调用 applyMiddleware() 时都会调用 createStore()。因此,每次运行都会有一个新商店。
  2. createStore()接受专门的增强器,这些增强器是添加到商店实例上的东西。像 applyMiddleware() 会提供的东西。
  3. 如果给 createStore() 赋予了增强器,它会(间接)递归调用 createStore() ,而无需任何增强器。因此,使用此增强器仅应用一次。

我认为多次应用中间件的唯一方法是实现您自己的 createStore() 版本。但此时您可能会得到循环引用。

关于javascript - React redux 的 #applyMiddleware 如何通过返回 #createStore 而不是 store 来确保中间件仅应用一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38964680/

相关文章:

javascript - 如何使用shim在requirejs中加载knockout.observableDictionary插件?

javascript - 在 Ember.js 中将字符串组合到绑定(bind)变量

javascript - 如何删除 mouseleave 上 append 的工具栏到主体或其他元素?

javascript - 不能 .map() 一个看似数组的值

javascript - 文件 ://protocol 上的 localStorage 回退尝试

javascript - 溢出 : hidden of absolute positioned elements

javascript - 将 child 添加到 React 元素

reactjs - 在 React Redux 应用程序中使用 OAuth2 刷新 token

reactjs - 如何使用 Redux 文档中解释的这个高阶组件?

android - react-redux 调度操作不适用于 android 但适用于 ios