Не удается получить значения магазина в избыточном - PullRequest
0 голосов
/ 30 сентября 2019

Мне нужно сохранить 2 объекта в магазине, который является пользователем и клиентом. Итак, я создал действия, редукторы и хранилище, как показано ниже.

export const ADD_USER = "ADD_USER";

export const ADD_CUSTOMER = "ADD_CUSTOMER";

Это мой файл действий, а мой редуктор похож на ниже

import { ADD_USER, EDIT_USER } from '../actions';

 const userReducer = (state = [], action) => {
  switch (action.type) {
    case ADD_USER:
      state.user = {...state.user, user: action.payload};
      return state

    default:
      return state;
  }
}

export default userReducer;

А это мой корневой редуктор

import { combineReducers } from 'redux';
import userReducer from './user';
import customerReducer from './customer';

const rootReducer = combineReducers({
  user: userReducer,
  customer: customerReducer
});

export default rootReducer;

Я назвал редуктор вот так

store.dispatch({
      type: ADD_USER,
      payload: user,
    })

Работает нормально. Но если мне нужно получить данные из хранилища, чтобы мне нужно было звонить вот так

let store = store.getState();
console.log(store.user) is not working
console.log(store.user.user) is working.

Как избежать этого вложенного уровня. Мне нужно получить пользователя из магазина, как это

store.user

Может ли кто-нибудь помочь решить эту проблему?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Проблема в том, что в вашем rootReducer вы создали user параметр внутри state . После этого вы пытаетесь добавить другой параметр user в ваш userReducer . Вот почему вы создаете проблему с вложенным объектом.

Простой способ ее решения:

import { ADD_USER, EDIT_USER } from '../actions';

const userReducer = (state = [], action) => {
  switch (action.type) {
    case ADD_USER:
      state.user = {...state, action.payload};   //there is a fix
      return state

    default:
      return state;
  }
}

export default userReducer;
1 голос
/ 30 сентября 2019

Вы должны вернуть новое целое состояние внутри вашего редуктора, для этого обновите ваш файл редуктора следующим образом:

import { ADD_USER, EDIT_USER } from '../actions';

 const userReducer = (state = [], action) => {
  switch (action.type) {
    case ADD_USER:
      return {
        ...state,
        user: action.payload
      }
    default:
      return state;
  }
}

export default userReducer;

...