问题描述
我以前有过这样的经历:
createStore(reducers,{},applyMiddleware(reduxThunk));
只是在某处看到了一段不同的代码,现在使用compose
将我的代码更改为此:
createStore(reducers,compose(applyMiddleware(reduxThunk)))
到目前为止,两者都可以正常工作。但我不完全了解其中的区别。我以前有错吗?有人可以向我解释一下吗?
解决方法
“商店增强器”是Redux插件的一种特殊类型,它围绕商店包裹以赋予其更多功能。
createStore
接受单个商店增强器作为参数,并使用它来定制创建的商店。
这意味着,如果您想一次使用多个商店增强器,则需要一种以某种方式将它们组合到单个商店增强器中的方法,以便将其传递给createStore
。 / p>
applyMiddleware
是一种商店增强器,因此您可以直接使用它,并将其结果作为唯一的增强器传递到createStore
。
如果您想使用多个{em> 增强器,例如applyMiddleware
和devTools
,则需要使用compose()
将它们组合在一起。
请注意,您实际上应该使用our official Redux Toolkit package,它具有a configureStore
API,已经可以使用一行代码为您正确设置Redux存储。
@markerikson是正确的。他们俩都工作良好。
-
如果您正在开发简单的React应用,那么第一个就足够了。
-
如果要处理大型项目,则需要使用第二个项目。如下所示:
const history = createHistory(); const sagaMiddleware = createSagaMiddleware(); const routeMiddleware = routerMiddleware(history); const中间件= [thunk,sagaMiddleware,routeMiddleware];
const composeEnhancers = (作为typeof组成的窗口[' REDUX_DEVTOOLS_EXTENSION_COMPOSE '])||撰写;
const store = createStore( CombineReducers({ 减速器 路由器:connectRouter(history), }), composeEnhancers(applyMiddleware(... middlewares)), );
来自redux文档:
提示 compose所做的全部工作就是让您编写深层嵌套的函数转换,而无需向右移动代码。不要给它太多的荣誉!
还可以添加一些与thunk和中间件不同的增强功能。看看这个comment