【问题标题】:Logout React Reducer w/ History, State & Action Bug注销带有历史、状态和操作错误的 React Reducer
【发布时间】:2020-07-10 09:43:57
【问题描述】:

嘿,我现在查看了一堆帮助文件,但似乎无法解决问题。大多数建议都使用与我不同的设置。其他人没有的主要问题是 LOGOUT 功能。您能否提出另一种处理 LOGOUT 的方法?

这是我用于“组合减速器”的 index.js:

import { combineReducers } from 'redux';
import { connectRouter } from 'connected-react-router';
import { LOGOUT_USER } from '../constants/index';

/* App Reducer Files */
import app from './app/reducer';
import accountData from './account/reducer';
import employeeData from './employee/reducer';
import locationData from './location/reducer';
import googleData from './google/reducer';
import requestData from './request/reducer';
import menuItemData from './menuItem/reducer';
import orderData from './order/reducer';

/* Public Reducer Files */
import valorData from './valor/reducer';

const appReducer = history => combineReducers({
    router: connectRouter(history),
    app,
    accountData,
    employeeData,
    locationData,
    googleData,
    requestData,
    menuItemData,
    orderData,

    // Public
    valorData,
});

const rootReducer = history => (state, action) => {
    if (action.type === LOGOUT_USER) {
        state = undefined;
    }
    return appReducer(history, state, action);
};

export default rootReducer;

还有我的 store.js:


import { createStore, applyMiddleware, compose } from 'redux';
import thunkMiddleware from 'redux-thunk';
import { createLogger } from 'redux-logger';
import { routerMiddleware } from 'connected-react-router';
import rootReducer from '../services';

import history from '../history';

const debugware = [];
if (process.env.NODE_ENV !== 'production') {
    debugware.push(createLogger({
        collapsed: true,
    }));
}

export default function configureStore(initialState) {
    const store = createStore(
        rootReducer(history),
        initialState,
        compose(
            applyMiddleware(
                routerMiddleware(history),
                thunkMiddleware,
                ...debugware,
            ),
        ),
    );

    if (module.hot) {
        // Enable Webpack hot module replacement for reducers
        module.hot.accept('../services', () => {
            const nextRootReducer = require('../services/index').default;
            store.replaceReducer(nextRootReducer);
        });
    }

    return store;
}

在我升级到新的路由器版本之前,这是可行的。再次,主要问题是注销。如果我只是导出 appReducer 它可以正常工作但不会注销。

【问题讨论】:

    标签: javascript reactjs redux react-redux react-router


    【解决方案1】:

    哇。在我发布它的那一刻,我尝试了另一件事......

    const rootReducer = history => (state, action) => {
        if (action.type === LOGOUT_USER) {
            state = undefined;
        }
        return appReducer(history)(state, action);
    };
    

    【讨论】:

      【解决方案2】:

      你为什么返回一个未定义的状态?相反,返回

      if (action.type === LOGOUT_USER) {
          return{ ...state, user: [] }
      }
      

      它基本上以用户身份返回和空数组。

      【讨论】:

      • 这并没有清除减速器...用户来自哪里?
      • 你是说...return{ ...state, app: {} , accountData: {}, etc?}
      • ...state 表示其余数据将在那里(它正在迭代)。 user: [] 表示您只是作为用户提供一个空白数组。
      • 我没有用户减速器......如果我只是传递状态,那有什么意义。我需要清除状态或缓存
      • 这没有任何作用,而且我需要将每个减速器放在那里。未定义的作品就好了。你能告诉我为什么我应该使用这个模型吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      • 2013-01-25
      相关资源
      最近更新 更多