javascript - 在 React Redux 中覆盖状态树

标签 javascript reactjs redux

大家好,我有一个独特的用例,我想从 combineReducer 的一个缩减器覆盖 redux 中的整个应用程序状态树。目的是我希望能够加载应用程序的不同 session (有点像保存按钮)。

但是我不知道该怎么做,我可以轻松地从 getState 获取整个状态并存储它,但似乎没有人可以设置它。我也试过研究 redux-persist 但我不太确定如何将持久对象传递给不同的组件。

有什么提示或线索吗?谢谢

最佳答案

您可以使用 Higher Order Reducer 来替换整个应用程序的状态。

Higher Order Reducer

请引用此链接。

如果您对此有任何疑问,请在评论中提问。

const {combineReducers, createStore} = require('redux');

function todos(state=[], action){
    switch (action.type) {
        case 'ADD_TODO':
            return [...state, action.data];
        default:
            return state;
    }
}

var state = {
    todos: ['todo1']
}

var reducers = combineReducers({
    todos: todos
});

var store = createStore(HigherOrderReducer(reducers), state);

function HigherOrderReducer(reducers, initialState){
    let higherState = {
        state: initialState
    }
    return function(state = {}, action){
        switch (action.type) {
            case 'REPLACE_WHOLE_STATE':
                higherState.state = action.data;
                return higherState.state;
            default:
                return reducers(state, action);
        }
    }
}

store.subscribe(function(){
    console.log(store.getState());
})

store.dispatch({
    type: 'ADD_TODO',
    data: 'todo2'
})

var newState = {
    todos: ['task1', 'task2']
}

store.dispatch({
    type: 'REPLACE_WHOLE_STATE',
    data: newState
})

关于javascript - 在 React Redux 中覆盖状态树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44856621/

相关文章:

node.js - 如何解决: "TypeError: Cannot read property ' map' of undefined"

javascript - 将 jQuery (Json) 中的日期时间附加到表中

javascript - 使 HTML 响应视口(viewport)

reactjs - React/Redux Router.transitionTo 不是一个函数

javascript - 在 map 功能中传递 Prop 不起作用。将其作为 key 传递

javascript - 如何让我的 HTML 表单日期输入仅允许使用 JavaScript、React 和 HTML 选择一周中的特定日期?

javascript - redux dumb组件功能单元测试

javascript - 我如何解析这些非 JSON 数据?

javascript - 循环遍历 Javascript 数组

javascript - React,react.children + react.cloneElement 在使用扩展运算符时中断