更改后的签名如何阻止您多次应用中间件?它返回一个新的#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.
最佳答案
问得好!我也不太明白这是如何明显的,但我认为它的工作原理大致如下:
-
applyMiddleware()
正如您所指出的,接受createStore()
函数。每次调用applyMiddleware()
时都会调用createStore()
。因此,每次运行都会有一个新商店。 -
createStore()
接受专门的增强器,这些增强器是添加到商店实例上的东西。像applyMiddleware()
会提供的东西。 - 如果给
createStore()
赋予了增强器,它会(间接)递归调用createStore()
,而无需任何增强器。因此,使用此增强器仅应用一次。
我认为多次应用中间件的唯一方法是实现您自己的 createStore()
版本。但此时您可能会得到循环引用。
关于javascript - React redux 的 #applyMiddleware 如何通过返回 #createStore 而不是 store 来确保中间件仅应用一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38964680/