Javascript 从使用CombineReducer的Redux主状态中删除特定属性的正确方法-React Redux

Javascript 从使用CombineReducer的Redux主状态中删除特定属性的正确方法-React Redux,javascript,reactjs,redux,react-redux,state,Javascript,Reactjs,Redux,React Redux,State,我有一个应用程序,我想实施授权(注册,登录,注销)。我必须使用redux来实现这一点。 到目前为止,注册和登录工作得很好,但当用户单击注销按钮时,我应该删除已登录用户的数据时,我遇到了一些问题 我试图将登录和注销案例放在同一个reducer中,但是当用户登录时,我无法访问用户的数据,而不是只获取旧用户数据对象并返回空对象,而是将一个空对象添加到用户数据中 登录前我的重排状态: export function userLoginSuccess(user) { return {

我有一个应用程序,我想实施授权(注册,登录,注销)。我必须使用redux来实现这一点。 到目前为止,注册和登录工作得很好,但当用户单击注销按钮时,我应该删除已登录用户的数据时,我遇到了一些问题

我试图将登录和注销案例放在同一个reducer中,但是当用户登录时,我无法访问用户的数据,而不是只获取旧用户数据对象并返回空对象,而是将一个空对象添加到用户数据中

登录前我的重排状态:

export function userLoginSuccess(user) {
    return {
        type: 'USER_LOGIN_SUCCESS',
        user
    }
}

export function userLogout() {
    return {
        type: 'USER_LOGOUT'
    }
}
export function userLogin(state = {}, action) {
    switch (action.type) {
        case 'USER_LOGIN_SUCCESS':
            localStorage.setItem('userToken', action.user.token);
            return action.user;
        case 'USER_LOGOUT':
            localStorage.removeItem('userToken');
            return {
                ...state,
                userLogin: {}
            }
        default:
            return state;
    }
}
import { userLogin, companies, dataHaveError, dataIsLoading } from './redux/reducers';

const rootReducer = combineReducers({
  companies,
  userLogin,
  dataHaveError,
  dataIsLoading
})

const enhancer = applyMiddleware(thunk);

const store = createStore(rootReducer, {}, composeWithDevTools(enhancer));

登录后我的重复使用状态:

export function userLoginSuccess(user) {
    return {
        type: 'USER_LOGIN_SUCCESS',
        user
    }
}

export function userLogout() {
    return {
        type: 'USER_LOGOUT'
    }
}
export function userLogin(state = {}, action) {
    switch (action.type) {
        case 'USER_LOGIN_SUCCESS':
            localStorage.setItem('userToken', action.user.token);
            return action.user;
        case 'USER_LOGOUT':
            localStorage.removeItem('userToken');
            return {
                ...state,
                userLogin: {}
            }
        default:
            return state;
    }
}
import { userLogin, companies, dataHaveError, dataIsLoading } from './redux/reducers';

const rootReducer = combineReducers({
  companies,
  userLogin,
  dataHaveError,
  dataIsLoading
})

const enhancer = applyMiddleware(thunk);

const store = createStore(rootReducer, {}, composeWithDevTools(enhancer));

注销后我的重新使用状态

以下是我的登录和注销操作:

export function userLoginSuccess(user) {
    return {
        type: 'USER_LOGIN_SUCCESS',
        user
    }
}

export function userLogout() {
    return {
        type: 'USER_LOGOUT'
    }
}
export function userLogin(state = {}, action) {
    switch (action.type) {
        case 'USER_LOGIN_SUCCESS':
            localStorage.setItem('userToken', action.user.token);
            return action.user;
        case 'USER_LOGOUT':
            localStorage.removeItem('userToken');
            return {
                ...state,
                userLogin: {}
            }
        default:
            return state;
    }
}
import { userLogin, companies, dataHaveError, dataIsLoading } from './redux/reducers';

const rootReducer = combineReducers({
  companies,
  userLogin,
  dataHaveError,
  dataIsLoading
})

const enhancer = applyMiddleware(thunk);

const store = createStore(rootReducer, {}, composeWithDevTools(enhancer));
这是减速器:

export function userLoginSuccess(user) {
    return {
        type: 'USER_LOGIN_SUCCESS',
        user
    }
}

export function userLogout() {
    return {
        type: 'USER_LOGOUT'
    }
}
export function userLogin(state = {}, action) {
    switch (action.type) {
        case 'USER_LOGIN_SUCCESS':
            localStorage.setItem('userToken', action.user.token);
            return action.user;
        case 'USER_LOGOUT':
            localStorage.removeItem('userToken');
            return {
                ...state,
                userLogin: {}
            }
        default:
            return state;
    }
}
import { userLogin, companies, dataHaveError, dataIsLoading } from './redux/reducers';

const rootReducer = combineReducers({
  companies,
  userLogin,
  dataHaveError,
  dataIsLoading
})

const enhancer = applyMiddleware(thunk);

const store = createStore(rootReducer, {}, composeWithDevTools(enhancer));
以下是使用组合减速机进行的存储初始化::

export function userLoginSuccess(user) {
    return {
        type: 'USER_LOGIN_SUCCESS',
        user
    }
}

export function userLogout() {
    return {
        type: 'USER_LOGOUT'
    }
}
export function userLogin(state = {}, action) {
    switch (action.type) {
        case 'USER_LOGIN_SUCCESS':
            localStorage.setItem('userToken', action.user.token);
            return action.user;
        case 'USER_LOGOUT':
            localStorage.removeItem('userToken');
            return {
                ...state,
                userLogin: {}
            }
        default:
            return state;
    }
}
import { userLogin, companies, dataHaveError, dataIsLoading } from './redux/reducers';

const rootReducer = combineReducers({
  companies,
  userLogin,
  dataHaveError,
  dataIsLoading
})

const enhancer = applyMiddleware(thunk);

const store = createStore(rootReducer, {}, composeWithDevTools(enhancer));

我试图找到一个解决方案,但我发现没有
组合减速机
,他们使用initialState来解决这类问题,但在这种情况下,我是如何理解的,
组合减速机
正在为每个减速机创建状态属性,因此我不知道如何处理此特定问题。

我非常接近:D非常感谢!
export function userLogin(state = {}, action) {
    switch (action.type) {
        case 'USER_LOGIN_SUCCESS':
            localStorage.setItem('userToken', action.user.token);
            return action.user;
        case 'USER_LOGOUT':
            localStorage.removeItem('userToken');
            return {} // return empty state
        default:
            return state;
    }
}