Javascript 如何反应redux';s#applyMiddleware通过返回#createStore而不是store来确保中间件只应用一次?

Javascript 如何反应redux';s#applyMiddleware通过返回#createStore而不是store来确保中间件只应用一次?,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,更改的签名如何防止您多次应用中间件?它返回一个新的#createStore,但此方法可以在另一个#applyMiddleware中再次用作参数,就像store可以再次使用一样,从而产生重复的中间件 为了确保只能应用一次中间件,它在 createStore()而不是存储本身。而不是(商店, Middleware)=>store,其签名为(…Middleware)=> (createStore)=>createStore 好问题!我也不太明白这是多么明显,但我认为它大致是这样工作的: 接受您指出的c

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

为了确保只能应用一次中间件,它在 createStore()而不是存储本身。而不是(商店, Middleware)=>store,其签名为(…Middleware)=> (createStore)=>createStore


好问题!我也不太明白这是多么明显,但我认为它大致是这样工作的:

  • 接受您指出的
    createStore()
    函数<每次调用
    applyMiddleware()
    时都会调用code>createStore()。因此,每次运行时都会有一个新的商店
  • 专门接受增强器,这些增强器是添加到存储实例中的东西。类似于
    applyMiddleware()
    将提供的功能
  • 如果
    createStore()
    被赋予了增强子,它(间接地)递归调用
    createStore()
    ,而没有任何增强子。所以使用这种方法只能使用一次增强剂

  • 我认为不止一次应用中间件的唯一方法是实现您自己版本的
    createStore()
    。但在这一点上,您可能会得到一个循环引用。

    因此,本质上,您是说存储可以进行变异,这意味着可以向其添加重复的增强子,而createStore将递归调用vanilla createStore,因此即使您多次使用applyMiddleware,它每次都会对香草createStore应用增强子,不会产生重复?对,基本上就是这样。我认为,一般来说,如果你选择颠覆Redux制定的机制,那么你就可以打破它。但是如果你坚持使用它们,
    createStore()
    applyMiddelware()
    一起工作来避免这种情况。