如何使用 redux-toolkit 中的 createSlice 方法在不同的 reducer 函数中使用单个动作类型

Posted

技术标签:

【中文标题】如何使用 redux-toolkit 中的 createSlice 方法在不同的 reducer 函数中使用单个动作类型【英文标题】:How to use single action type in different reducer function with createSlice method in redux-toolkit 【发布时间】:2021-04-06 19:06:41 【问题描述】:

多个 reducer(使用 createSlice 方法创建)是否可能必须响应相同的操作?

import  createSlice  from '@reduxjs/toolkit';

const isAuthenticated = createSlice(
    name: 'isAuthenticated',
    initialState: false,
    reducers: 
        loginSuccess(state, action) 
            return true;
        ,
        logout(state, action) 
            return false;
        ,
    ,
);

export const  loginSuccess, logout  = isAuthenticated.actions;

export default isAuthenticated.reducer;

const currentUser = createSlice(
    name: 'currenUser',
    initialState: 'jhon',
    reducers: 
        loginSuccess(state, action) 
            return 'steve';
        ,
        logout() 
            return state;
        ,
    ,
);

export const currentUserReducer = currentUser.reducer;

如您所见,action.type loginSuccess 位于两个不同的 reducer 中,因为我只导出 isAuthenticated 的 loginSuccess 我只能使用该操作进行调度。 我知道我也可以从 currentUser 导出 loginSuccess,但我只想调度一个动作并在两种不同的状态下更改状态。

我知道这可以用 vanilla redux 来完成,redux 也推荐使用它Here

简而言之,我正在尝试复制 this,但使用 redux-tool-kit 中的 createSlice 方法。

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

您正在寻找extraReducers:

const isAuthenticated = createSlice(
    name: 'isAuthenticated',
    initialState: false,
    reducers: 
        loginSuccess(state, action) 
            return true;
        ,
        logout(state, action) 
            return false;
        ,
    ,
);

export const  loginSuccess, logout  = isAuthenticated.actions;

export default isAuthenticated.reducer;

const currentUser = createSlice(
    name: 'currenUser',
    initialState: 'jhon',
    reducers: 
        logout() 
            return state;
        ,
    ,
    extraReducers: builder => 
      builder.addCase(isAuthenticated.actions.loginSuccess, () => 
        return 'steve'
      )
    

);

【讨论】:

以上是关于如何使用 redux-toolkit 中的 createSlice 方法在不同的 reducer 函数中使用单个动作类型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Storybook 中使用 redux-toolkit?

如何在 Redux-toolkit 中使用两个不同的切片?

如何实现redux-toolkit和next,js又不丢s-s-r

如何将 redux-toolkit createSlice 与 React 类组件一起使用

WebStorm 中的 Redux-toolkit 操作参数

将项目添加到 redux-toolkit 中的嵌套数组