store.getState () возвращает объекты редуктора при использовании combReducers - PullRequest
0 голосов
/ 11 марта 2019

В моем проекте я пытаюсь объединить два редуктора, но всякий раз, когда я пытаюсь объединить их с помощью combReducers ({}), мои реквизиты становятся неопределенными, и мое состояние (из store.getState ()) оказывается именем двух объектов после мои редукторы. Смотрите мои настройки редуктора

корень / reducers.js

import { combineReducers } from 'redux'
import dashboardReducer from '../views/DashboardPage/redux/reducers'
import formReducer from '../views/FormPage/redux/reducers'

export default combineReducers({
    dashboardReducer,
    formReducer
})

configureStore.js

import { createStore, compose } from "redux";
import rootReducer from "./reducers";

const storeEnhancer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;

const store = createStore(rootReducer);

export default store;

приборная панель / reducer.js

import {ADD_FIELD} from "./types"

const initialState = {
  fields: [{title: "bla", text: "jorge", id: 1}],
};

const dashboardReducer = (state = initialState, action) => {
  switch (action.type) {
    case ADD_FIELD:
      return {
        ...state,
        fields: state.fields.concat(action.payload)
      };
    default:
      return state;
  }
};

export default dashboardReducer;

формы / reducer.js

const formReducer = (state = 0, action) => {
  switch (action.type) {
    case 'INCREMENT':
      return state + 1;
    case 'DECREMENT':
      return state - 1;
    default:
      return state
  }
};

export default formReducer;

вызов console.log для "store.getState ()" и "this.props" (после сопоставления состояния с props) возвращает следующее, соответственно: console.log's

console.log s

если это имеет значение, я использую реагирующий маршрутизатор

1 Ответ

1 голос
/ 11 марта 2019

Это правильное поведение, и похоже, что вам нужно изменить mapStateToProps, чтобы правильно его обработать, поэтому вы можете захотеть добавить свою функцию отображения в свой вопрос.

export default combineReducers({
  dashboardReducer,
  formReducer
})

Использование combineReducersозначает, что вы будете управлять различными срезами своего состояния с помощью разных редукторов, и эти срезы будут именоваться в соответствии с ключами в объекте, который вы предоставляете.Вы, вероятно, захотите изменить это на:

import dashboard from '../views/DashboardPage/redux/reducers'
import form from '../views/FormPage/redux/reducers'

export default combineReducers({
  dashboard,
  form
})

. Это приведет к тому, что ваше состояние будет иметь форму:

{
  dashboard: { dash: "things" },
  form: {}
}

Ваш редуктор приборной панели будет вызываться с состоянием, установленным на

{ dash: "things" }

и ваш mapStateToProps должен будет соответственно прочитать состояние

return {
  fields: state.dashboard.fields
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...