我可以在没有 Redux Thunk 中间件的情况下分派多个操作吗?
Can I dispatch multiple actions without Redux Thunk middleware?
我读到 Redux Thunk 是管理异步的可靠方法 actions/request。通过其他动作调度动作没什么大不了的。
如何调度同步操作?
我不确定 thunk 方法的性能问题,但我可以在其他动作创建者内部调度动作而不在内部定义函数吗?
在我看来,对于这种需要,使用 redux thunk 是不必要的。
将状态更改的操作视为一对一是错误的。它们实际上是多对多的。请记住,所有操作都会在所有减速器上调用。
例如,单个操作可能会触发多个状态更改:
function firstReducer(state, action) {
switch (action.type) {
case ACTION_X:
// handle action x
}
}
function secondReducer(state, action) {
switch (action.type) {
case ACTION_X:
// handle action x
}
}
function thirdReducer(state, action) {
switch (action.type) {
case ACTION_X:
// handle action x
}
}
相反,相同的状态更改可能由两个不同的操作引起。
function firstReducer(state, action) {
switch (action.type) {
case ACTION_X:
case ACTION_Y:
// handle action x and y in the same manner
}
}
以相同的方式处理两个动作可能看起来很奇怪,但这只是在单个 reducer 的上下文中。其他减速器可以自由地以不同方式处理它们。
function secondReducer(state, action) {
switch (action.type) {
case ACTION_X:
// handle action x
case ACTION_Y:
// handle action y
}
}
function thirdReducer(state, action) {
switch (action.type) {
case ACTION_X:
// handle action x
default:
// ignore action y
}
}
有了这种多对多关系,根本就没有必要使用操作层次结构。如果您有动作创建者触发多个同步动作,您的代码将变得更加复杂且难以推理。
显示和隐藏通知 似乎是 thunk 的一个很好的用例。
描述了为响应某事而进行多次更新的“默认”方式:从不同的 reducer 处理它。大多数情况下,这就是您想要做的。
有时(如通知)可能会带来不便。我在 .
中描述了如何在调度一个或多个操作之间进行选择
如果您 决定分派多个操作,要么从组件中按顺序执行,要么使用 Redux Thunk。请注意,如果 Redux Thunk 对您来说很神秘,您应该 在使用它之前。它仅在代码组织方面提供好处;实际上,这与您自己连续两次 运行 dispatch()
没有什么不同。
就是说,Redux Thunk 调度多个操作如下所示:
function increment() {
return { type: 'INCREMENT' }
}
function incrementTwice() {
return dispatch => {
dispatch(increment())
dispatch(increment())
}
}
store.dispatch(increment())
incrementTwice()(store.dispatch) // doesn’t require redux-thunk but looks ugly
store.dispatch(incrementTwice()) // requires redux-thunk but looks nice
使用 Redux Thunk 不会有任何性能问题。这只是一种很好的调用函数的方式,您可以将您的 dispatch
交给它们,这样他们就可以随心所欲地调用函数。
如果 this 通过,那么是的,使用:
store.dispatch(action1, action2)
也许在 github 时 +1?
我读到 Redux Thunk 是管理异步的可靠方法 actions/request。通过其他动作调度动作没什么大不了的。
如何调度同步操作? 我不确定 thunk 方法的性能问题,但我可以在其他动作创建者内部调度动作而不在内部定义函数吗?
在我看来,对于这种需要,使用 redux thunk 是不必要的。
将状态更改的操作视为一对一是错误的。它们实际上是多对多的。请记住,所有操作都会在所有减速器上调用。
例如,单个操作可能会触发多个状态更改:
function firstReducer(state, action) {
switch (action.type) {
case ACTION_X:
// handle action x
}
}
function secondReducer(state, action) {
switch (action.type) {
case ACTION_X:
// handle action x
}
}
function thirdReducer(state, action) {
switch (action.type) {
case ACTION_X:
// handle action x
}
}
相反,相同的状态更改可能由两个不同的操作引起。
function firstReducer(state, action) {
switch (action.type) {
case ACTION_X:
case ACTION_Y:
// handle action x and y in the same manner
}
}
以相同的方式处理两个动作可能看起来很奇怪,但这只是在单个 reducer 的上下文中。其他减速器可以自由地以不同方式处理它们。
function secondReducer(state, action) {
switch (action.type) {
case ACTION_X:
// handle action x
case ACTION_Y:
// handle action y
}
}
function thirdReducer(state, action) {
switch (action.type) {
case ACTION_X:
// handle action x
default:
// ignore action y
}
}
有了这种多对多关系,根本就没有必要使用操作层次结构。如果您有动作创建者触发多个同步动作,您的代码将变得更加复杂且难以推理。
显示和隐藏通知
有时(如通知)可能会带来不便。我在
如果您 决定分派多个操作,要么从组件中按顺序执行,要么使用 Redux Thunk。请注意,如果 Redux Thunk 对您来说很神秘,您应该 dispatch()
没有什么不同。
就是说,Redux Thunk 调度多个操作如下所示:
function increment() {
return { type: 'INCREMENT' }
}
function incrementTwice() {
return dispatch => {
dispatch(increment())
dispatch(increment())
}
}
store.dispatch(increment())
incrementTwice()(store.dispatch) // doesn’t require redux-thunk but looks ugly
store.dispatch(incrementTwice()) // requires redux-thunk but looks nice
使用 Redux Thunk 不会有任何性能问题。这只是一种很好的调用函数的方式,您可以将您的 dispatch
交给它们,这样他们就可以随心所欲地调用函数。
如果 this 通过,那么是的,使用:
store.dispatch(action1, action2)
也许在 github 时 +1?