【问题标题】:How to use shared reducers in Redux如何在 Redux 中使用共享 reducer
【发布时间】:2023-03-22 08:06:01
【问题描述】:

我有一个关于减速器的一般性问题。在我的应用程序中,我有很多用户(孩子、家长和老师)。我创建了一个 reducer 来从数据库中为家长/老师加载任务,在我的初始状态下,我有一个数组“Tasks”。

我是否必须创建另一个reducer 来从数据库加载孩子的任务,我必须这样做,我可以使用相同的数组名称“Tasks”吗?

TasksReducer.js:

const initialState = {
    tasks: [],
    image: null
}

const tasks = (state = initialState, action) => {
    switch (action.type) {
        case 'LOAD_TASKS_FROM_SERVER':
            return {
                ...state,
                tasks: action.payload
            };
        case 'ADD_TASK':
            return {
                ...state,
                tasks: [action.payload, ...state.tasks]
            }
            default:
                return state;
    }
};

TasksChildReducer.js :(我只有“LOAD_TASKS_FROM_SERVER”)

const initialState = {
  tasksChildren: [],
}

【问题讨论】:

    标签: redux reducers


    【解决方案1】:

    我认为最简单的方法是在 root redux 状态的不同 key 中安装不同的 reducer。

    所以他们自己的密钥可以命名相同,你会像这样访问它们

    
    const getChildrenTasks = state => state.children.tasks
    
    const getParentTasks = state => state.parent.tasks
    
    etc.
    

    为避免代码重复,还可以在常用函数中抽象一些reducer操作。

    【讨论】:

    • 那么在这里,它们将拥有相同的数组名称“tasks”?
    • 是的,键名相同,但在不同的对象中
    • 好的,但是,当我在我的 js 文件中使用它时,我怎么知道这两个对象之间的区别..?
    • 例如,我有这个js文件给老师/家长 const mapStateToProps=state=>{ return{ tasks:state.tasks }; } const mapDispatchToProps=dispatch=>{ return{ loadTasks:tasks=> dispatch({type:'LOAD_TASKS_FROM_SERVER',payload:tasks}), addTask:task=>dispatch({type:'ADD_TASK',payload:task}),但是我怎么能看出这个js文件和孩子用的js文件的区别呢?
    猜你喜欢
    • 1970-01-01
    • 2016-04-11
    • 2018-11-20
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 2021-06-06
    相关资源
    最近更新 更多