Redux-persist продолжает загружаться - PullRequest
0 голосов
/ 02 сентября 2018

Мотивация

Я хотел бы сохранить информацию о пользователе при обновлении / перенаправлении страницы, но также хочу очистить ее после выхода из системы.

<Ч />

Конфигурация

const rootReducer = combineReducers({productsReducer, auth: accessReducer, usersReducer});

const persistConfig = {
    key: 'root',
    storage,
    whitelist: ['auth']
};

Я хочу сохранить данные только в accessReducer, поэтому они занесены в белый список. Теперь я хочу обработать выход таким образом, чтобы все данные были сброшены. Для этого я создал logoutReducer:

Редуктор выхода из системы

export const logout = () => ({
    type: 'USER_LOGOUT'
});

const logoutReducer = (state, action) => {
    if(action.type = 'USER_LOGOUT'){
        state = undefined;
    }

    return rootReducer(state, action);
};

Магазин и персистор

const persistedReducer = persistReducer(persistConfig, logoutReducer);
export const store = createStore(persistedReducer, applyMiddleware(thunk));
export const persistor = persistStore(store);
<Ч />

ПРОБЛЕМА

Как только я запускаю приложение, я получаю информацию о загрузке, которая поступает из <Loader/> в PersistGate:

<Provider store={store}>
    <PersistGate loading={<Loader/>} persistor={persistor}>
        ...
    </PersistGate>
</Provider>

ВОЗМОЖНАЯ ПРИЧИНА

Теперь я предполагаю, что это потому, что я передаю logoutReducer, который имеет отношение только к другим редукторам, и именно поэтому конфигурация терпит неудачу. Как мне сохранить информацию о пользователе и сохранить трюк выхода из системы? Есть ли другое решение для этого? Любая помощь будет оценена ♥

1 Ответ

0 голосов
/ 02 сентября 2018

ОТВЕТ

Во время исследования этой проблемы я обнаружил эту проблему, в которой у постера была похожая проблема. Решение в последнем комментарии в этом посте, а именно: реагируют сброса * +1007 *. Вот мое приложение этого пакета для упомянутой выше проблемы:

const appReducer = combineReducers({productsReducer, auth: accessReducer, usersReducer});

const persistConfig = {
    key: 'root',
    storage,
    whitelist: ['auth']
};

const enHanceCreateStore = compose(
    applyMiddleware(thunk),
    reduxReset()
)(createStore);

const persistedReducer = persistReducer(persistConfig, appReducer);
export const store = enHanceCreateStore(persistedReducer);
export const persistor = persistStore(store);

Тогда вы просто выполняете действие по отправке из системы redux-reset:

store.dispatch({
  type: 'RESET'
})
...