【问题标题】:it is necessary to implement the case REHYDRATE in redux-persist?有必要在 redux-persist 中实现案例 REHYDRATE 吗?
【发布时间】:2019-05-23 17:22:02
【问题描述】:

我正在研究 react-native 的概念证明,我正在使用 redux-persist。根据我阅读的内容,状态是在版本 5 中自动分配的,但是在没有 REHYDRATE 的情况下我无法重新水化状态。

我的减速机:

import {ADD_USER} from '../constants/actionTypes';
import { REHYDRATE } from 'redux-persist';


const initialState = {
    userName: null,
    fetching: false
};

const userReducer = (state = initialState, action) => {
    let copied = Object.assign({}, state);
    switch (action.type){
        case ADD_USER:
            copied.userName = action.payload;
            break;
        case REHYDRATE:
            //console.log('Payload desde el reducer ', action.payload);fsdffdsdsfsdfsdf
            copied = action.payload.userReducer;
            break;
        default:
            break;
    }

    return copied;
};

export default userReducer;

我的配置商店

const persistConfig = {
    key: 'root',
    storage,
    stateReconciler: autoMergeLevel2,
};

function logger({ getState }) {
    return (next) => (action) => {
        let returnValue = next(action)
        return returnValue
    }
}

const persistedReducer = persistCombineReducers(persistConfig, {userReducer});

export default () => {
    let store = createStore(persistedReducer, undefined, applyMiddleware(logger));
    let persistor = persistStore(store, null, () => {
        Alert.alert(
            'Current state',
            JSON.stringify(store.getState()),
            [
                {text: 'OK', onPress: () => console.log('OK Pressed')},
            ],
            { cancelable: false }
        );
    });
    return { store, persistor }
}

【问题讨论】:

    标签: javascript redux redux-persist


    【解决方案1】:

    我的问题是我在方法结束时返回了状态,而不是在每次切换时都返回它,这肯定会破坏自动补液。更改减速器返回我的问题消失了。

    reducer 代码是这样的:

    const initialState = {
        userName: null,
        fetching: false
    };
    
    const userReducer = (state = initialState, action) => {
        switch (action.type){
            case ADD_USER:{
                let copied = Object.assign({}, state);
                copied.userName = action.payload;
                return copied;
            }
            default:
                return state;
        }
    };
    
    export default userReducer;
    

    【讨论】:

    • 这很奇怪,但你的帖子拯救了我的一天
    猜你喜欢
    • 2021-03-25
    • 2019-04-04
    • 2016-10-03
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2021-10-05
    相关资源
    最近更新 更多