如何分离redux reducer的逻辑,只需要在所有reducers之间共享一些状态

时间:2017-11-04 19:56:00

标签: react-redux

我目前的情况: 我有一个消息状态,用于存储应用程序发生的事情 某些操作(实际上几乎所有操作)都被触发并计算最终状态。除此消息外,其他状态可以分为不同的独立部分。但是因为我需要为每个动作更新消息状态,所以我坚持将每个减少功能放入一个巨大的减速器中。有什么我可以做的,以避免一个巨大的减速器,并将不同的减速器功能放到不同的减速器,并使每个减速器控制一个状态的一部分,同时共享一个共同的消息状态?

一些最小化的reducer代码:

const reducer = (state = {}, action) => {
    switch (action.type) {
        case ActionTypes.MOVE_CHARACTER: {
            const message = computeMoveMessage(state.maze, action.payload);
            return {
                ...state,
                message,
            };
        }
        case ActionTypes.END_BATTLE: {
            const message = computeEndMessage(state.maze, action.payload);
            return {
                ...state,
                message,
            };
        }
        case ActionTypes.CHARACTER_ATTACKS: {
            const message = computeAttackMessage(state.maze, action.payload);
            return {
                ...state,
                message,
            };
        }
        case ActionTypes.SAVE_FILE: {
            const message = computeSaveFileMessage(state.file, action.payload);
            return {
                ...state,
                message,
            };
        } 
        case ActionTypes.LOAD_FILE: {
            const message = computeLoadFileMessage(state.file, action.payload);
            return {
                ...state,
                message,
            };
        }  
        default:
            return state;
        }
   }

如您所见,LOAD_FILESAVE_FILE减速器大部分独立于其他三个减速器。但是,由于我需要更新state.message,所有5个减速器都被强制放入一个巨型reducer.js。是否有任何解决方法,以便我可以将状态分为state.filestate.maze,同时两者共享state.message

0 个答案:

没有答案