如何在redux工具箱的自动生成操作中调用另一个自动生成的操作



我正在开发一款小游戏。所以我第一次使用redux工具包。(我习惯于重复(

这个createSlice方法非常棒,但我不知道如何在操作中调用操作。因此动作是自动生成的,因此在生成之前不可用。

示例:

const gameSlice = createSlice({
    name: 'game',
    initialState,
    reducers: {
        startNewGame: (state) => {
            state.activeTeam = state.config.startTeam = random(0, 1)
            state.winner = undefined
        },
        endRound: (state, action, dispatch) => { // last param not available
            // ... code that handles the rounds inputs and counts points for each team ...
            if(state.red >= 30) {
                // HOW?! Here's something i tried
                endGame(state, Team.Red)
                dispatch({type: endGame, payload: Team.Red})
                dispatch({type: gameSlice.endGame, payload: Team.Red})
            }
            if(state.blue >= 30) {
                // HOW?! Here's something i tried
                endGame(state, Team.Blue)
                dispatch({type: endGame, payload: Team.Blue})
                dispatch({type: gameSlice.endGame, payload: Team.Blue})
            }
        },
        endGame: (state, action) => {
            state.winner = action.payload
        }
    }
})

这只是一个小例子。没有async,也没有后端调用。我只想嵌套行动调用。假设很简单。。。但我不知道如何用KISS的方式来做。

我读了一些关于extraReducerscreateAsyncThunk的内容,但我不会对每个操作都这样做,因为这里没有异步的东西,而且使用redux工具包也没有任何好处。这只是一堆无用的代码。

我觉得我是瞎子,或者是愚蠢,或者只是困惑。。。但这让我现在快疯了。

没有redux工具包,这很容易。感谢您的帮助。

您可以never在Redux reducer内部调度更多操作

但是,可以编写额外的辅助函数来在reducers中执行常见的更新任务,并根据需要调用这些函数。这在RTK的createSlice中使用Immer供电的减速器时尤其有用。

此外,可以根据需要调用其他大小写减少器,方法是引用slice.caseReducers对象,如:

reducers: {
  endRound(state, action) {
    if (someCondition) {
      // "Mutate" state using the `endGame` case reducer
      mySlice.caseReducers.endGame(state)
    }
  },
  endGame(state, action) {}
}

最新更新