Подтвердить что ты не робот

React-Redux: комбинированные редукторы: неожиданные ключи

Мое приложение отлично работает, прежде чем я начну комбинировать редукторы Redux. Но когда я совмещаю, клавиши initialState и редуктора смешиваются.

function flash(state = [], action) {
  switch (action.type) {
  case FLASH_MESSAGE_UPDATED:
    return _.extend({}, state, { flash: action.flash })
  default:
    return state
  }
}

function events(state = [], action) {
  switch (action.type) {
  case EVENTS_UPDATED:
    return _.extend({}, state, { events: action.pathway_events })
  default:
    return state
  }
}

export default combineReducers({
  events,
  flash
})

Это приводит к нарушенной функциональности и ошибке консоли:

Unexpected keys "one", "two" found in initialState argument passed to createStore. Expected to find one of the known reducer keys instead: "events", "flash". Unexpected keys will be ignored.

Мое начальное состояние передается с помощью сокращения-thunk.

import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import reducer from '../../reducers/event'

let initialState = {
  one: globalData.one,
  two: globalData.two,
  events: globalData.events,
  flash: globalData.flash
}
let createStoreWithMiddleware = applyMiddleware(thunk)(createStore)
let reduxStore = createStoreWithMiddleware(reducer, initialState);

React.render(
  <Provider store={reduxStore}>
    <EventListContainer />
  </Provider>,
  $('.events')[0]
)

Как правильно комбинировать редукторы?

4b9b3361

Ответ 1

Я думаю, вам просто нужно добавить редукторы для дополнительных клавиш, например.

function one(state = {}, action) {
  switch (action.type) {
  case ONE_UPDATED:
    return action.one
  default:
    return state
  }
}

Из документов:

Если вы создали редуктор с combReducers, это должен быть простой объект с той же формой, что и ключи, переданные ему. В противном случае вы можете передавать все, что может понять ваш редуктор.

Если вам не нужно обрабатывать какие-либо действия, связанные с one или two, сначала просто потяните их, это может быть так же просто, как

export default combineReducers({
  events,
  flash,
  one: (state = {}) => state,
  two: (state = {}) => state
})