Использование неизменяемых JS и Redux - действие не определено - PullRequest
0 голосов
/ 15 октября 2018

Я использую Redux и Immutable JS.Я настроил хранилище так:

import { combineReducers } from 'redux-immutable';

...
const rootReducer = combineReducers({});    
import { initialState } from '../reducers/...';

export const store = createStore(
    combineReducers(rootReducer, initialState),
    composeEnhancers(
        applyMiddleware(...middleware)
    )
);

Теперь я получаю следующую ошибку

// reducers/.../initialState.js

export function foo(state = initialState, action) {
    switch (action.type) {
     ...
...

TypeError: Невозможно прочитать свойство 'type' из неопределенного

и это выделяет switch (action.type) {.

Когда я не использую redux-immutable и не настраиваю свой магазин следующим образом

import { ..., combineReducers } from 'redux';    

export const store = createStore(
    combineReducers({ initialState }),
    composeEnhancers(
        applyMiddleware(...middleware)
    )
);

Я не получаю ошибку.Я не понимаю, почему он говорит, что action.type это undefined.Есть идеи?

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Ваш initialState не должен быть редуктором.Вы должны объединять только все ваши редукторы.

Ваше начальное состояние должно быть object (Штат).

например,

{
 loaded: true,
 someDataString: ''
}
0 голосов
/ 15 октября 2018

combineReducers принимает только редукторы:

const yourRootReducer = combineReducers({ someReducer, someOtherReducer })

Это не занимает initialState, ваши индивидуальные магазины могут (и createStore, хотя обычно вам не нужнытуда).

Ваш вызов createStore должен быть следующим:

const store = createStore(
  rootReducer,
  initialState, // can be undefined
  composeEnhancers(
    applyMiddleware(...middleware)
  )
);

Предполагается, что промежуточное ПО является массивом.

0 голосов
/ 15 октября 2018

Я думаю, ваш код должен выглядеть следующим образом

export const store = createStore(
    rootReducer, initialState,
    composeEnhancers(
        applyMiddleware(...middleware)
    )
);
// I removed the combineReducers()

Ссылка: https://github.com/gajus/redux-immutable#usage

Пример:

import {
  combineReducers
} from 'redux-immutable';

import {
  createStore
} from 'redux';

const initialState = Immutable.Map();
const rootReducer = combineReducers({});  // we use the combineReducers() here
const store = createStore(rootReducer, initialState); // and don't need to use it here
...