- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用createStore
时,需要1个参数和2个可选参数:
reducer
(函数):在给定当前状态树和要处理的操作的情况下,返回下一个状态树的缩减函数。
preloadedState
(任何):初始状态。您可以选择指定它以在通用应用程序中混合来自服务器的状态,或恢复以前序列化的用户 session 。如果您使用 combineReducers 生成了 reducer
,这必须是一个普通对象,其形状与传递给它的键相同。否则,您可以自由传递您的 reducer
可以理解的任何内容。
enhancer
(功能):商店增强器。您可以选择指定它以使用中间件、时间旅行、持久性等第三方功能增强商店。Redux 附带的唯一商店增强器是 applyMiddleware()
。
如果我们将 combineReducers
和 applyMiddleware()
一起使用,则可以在使用 createStore()
时省略第二个参数,如下所示:
(在 official doc's example 中,显示了相同的使用模式)
const modules = combineReducers(reducer1, reducer2)
const store = createStore(modules, applyMiddleware(...middlewares))
这怎么可能? combineReducers
只返回一个函数
。在上面的示例中,createStore
是否可以知道第二个(也是最后一个)参数是否是store enhancer,而不是初始状态?
最佳答案
当你查看createStore的源代码时可以看到如下验证码:
export default function createStore<
S,
A extends Action,
Ext = {},
StateExt = never
>(
reducer: Reducer<S, A>,
preloadedState?: PreloadedState<S> | StoreEnhancer<Ext, StateExt>,
enhancer?: StoreEnhancer<Ext, StateExt>
): Store<ExtendState<S, StateExt>, A, StateExt, Ext> & Ext {
if (
(typeof preloadedState === 'function' && typeof enhancer === 'function') ||
(typeof enhancer === 'function' && typeof arguments[3] === 'function')
) {
throw new Error(
'It looks like you are passing several store enhancers to ' +
'createStore(). This is not supported. Instead, compose them ' +
'together to a single function.'
)
}
if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {
enhancer = preloadedState as StoreEnhancer<Ext, StateExt>
preloadedState = undefined
}
if (typeof enhancer !== 'undefined') {
if (typeof enhancer !== 'function') {
throw new Error('Expected the enhancer to be a function.')
}
return enhancer(createStore)(reducer, preloadedState as PreloadedState<
S
>) as Store<ExtendState<S, StateExt>, A, StateExt, Ext> & Ext
}
if (typeof reducer !== 'function') {
throw new Error('Expected the reducer to be a function.')
}
preloadedState
state 应该是一个对象,enhancer
应该是一个函数,否则 createStore
会返回一个错误。
关于javascript - createStore with combineReducers 和 applyMiddleware 没有第二个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58790029/
我正在使用 Gunicorn 为 Django 应用程序提供服务,它工作正常,直到我将其超时时间从 30 秒更改为 900000 秒,我不得不这样做,因为我有一个用例需要上传和处理一个巨大的文件(过程
我有一个带有非常基本的管道的Jenkinsfile,它可以旋转docker容器: pipeline { agent { dockerfile { args '-u root' } } stag
在学习 MEAN 堆栈的过程中,我遇到了一个问题。每当我尝试使用 Passport 验证方法时,它都不会返回任何响应。我总是收到“localhost没有发送任何数据。ERR_EMPTY_RESPONS
在当今的大多数企业堆栈中,数据库是我们存储所有秘密的地方。它是安全屋,是待命室,也是用于存储可能非常私密或极具价值的物品的集散地。对于依赖它的数据库管理员、程序员和DevOps团队来说,保护它免受所
是否可以创建像图片上那样的边框?只需使用 css 边框属性。最终结果将是没 Angular 盒子。我不想添加额外的 html 元素。我只想为每个 li 元素添加 css 边框信息。 假设这是一个 ul
我是一名优秀的程序员,十分优秀!