Redux 反应/重复执行多个操作

Redux 反应/重复执行多个操作,redux,react-redux,Redux,React Redux,在处理程序中一个接一个地分派多个(同步)操作是个坏主意吗 假设我有3个按钮:buttonA、buttonB和buttonC 对于我的第一个减速器,重要的是要知道单击了哪个按钮,所以它可能看起来像这样: const firstReducer = function(state = [], action){ switch(action.type) { case types.BUTTON_A_CLICKED: console.log("button a

在处理程序中一个接一个地分派多个(同步)操作是个坏主意吗

假设我有3个按钮:buttonA、buttonB和buttonC

对于我的第一个减速器,重要的是要知道单击了哪个按钮,所以它可能看起来像这样:

const firstReducer = function(state = [], action){

    switch(action.type) {

        case types.BUTTON_A_CLICKED:
            console.log("button a was clicked");
            return state.concat("a");

        case types.BUTTON_B_CLICKED:
            console.log("button b was clicked");
            return state.concat("b");

        case types.BUTTON_C_CLICKED:
            console.log("button c was clicked");
            return state.concat("c");

        default:
            return state;
    }
}
const secondReducer = function(state = [], action){

    switch(action.type) {

        case types.BUTTON_A_CLICKED:
        case types.BUTTON_B_CLICKED
        case types.BUTTON_B_CLICKED
            console.log("some button was clicked");
            return state.concat("button");

        default:
            return state;
    }
}
但是我的第二个减速机只是想知道按钮是什么时候被点击的(不关心哪个按钮)。我知道我能做到这一点:

const firstReducer = function(state = [], action){

    switch(action.type) {

        case types.BUTTON_A_CLICKED:
            console.log("button a was clicked");
            return state.concat("a");

        case types.BUTTON_B_CLICKED:
            console.log("button b was clicked");
            return state.concat("b");

        case types.BUTTON_C_CLICKED:
            console.log("button c was clicked");
            return state.concat("c");

        default:
            return state;
    }
}
const secondReducer = function(state = [], action){

    switch(action.type) {

        case types.BUTTON_A_CLICKED:
        case types.BUTTON_B_CLICKED
        case types.BUTTON_B_CLICKED
            console.log("some button was clicked");
            return state.concat("button");

        default:
            return state;
    }
}
但是,如果我有1000个按钮呢?我能把我的第二个减速器做成这样吗

const secondReducer = function(state = [], action){

    switch(action.type) {

        case types.BUTTON_CLICKED:
            console.log("some button was clicked");
            return state.concat("button");

        default:
            return state;
    }
}
从处理程序中,为每个按钮单击分派2个操作, 一个用于特定按钮(单击按钮) 和一个常规(单击按钮)

当然,这是一个愚蠢的例子,我可以只发送点击的按钮,在动作数据中发送点击的按钮,如果任何减速器对该信息感兴趣,它可以从动作对象中获取

我在谷歌上做的每一次搜索都是为了看看redux thunk或saga,但我很好奇为什么(如果)按照我的建议去做是个坏主意


谢谢。

在我看来,按照您描述的方式发送多个操作没有什么错

然而,当我想做类似的事情时,我遵循的模式是只从处理程序中分派一个操作,然后使用它来允许这个主要操作分派后续操作

下面是一个示例,取自实时代码,我在一个动作中调度多个动作。
actions.modelSelect
函数返回一个
thunk

actions.modelSelect = modelId => {
  return (dispatch, getState) => {
    const state = getState()
    const model = getModelById(state, modelId)
    dispatch({
      types,
      type: types.modelSelect,
      local: true,
      data: model
    })
    dispatch(actionHub.USAGE_LIST_FILE_SERVER())
    dispatch(actionHub.USAGE_LIST_FILE_MSAPI(modelId))
    dispatch(actionHub.BUILD_LIST(modelId))
  }
}

所以我想我应该找个时间进入redux thunk,好像每个人都在用它。谢谢。redux-thunk允许您将特殊类型的操作视为函数。这意味着您可以使用特定的操作相关逻辑扩展普通操作。您给出的需要分派与另一个操作相关的操作的示例是redux thunk(或类似软件包)的一个很好的用例。