Неперехваченная ошибка: сокращение "usershortcuts" вернуло значение undefined во время инициализации.

Итак, я пытаюсь инициализировать хранилище ExtReact перед запуском приложения, чтобы я мог загружать данные, используя хранилище Redux для обновления состояния приложения. Пусть вас не смущает призыв к действию, он просто используется для уведомления редуктора о том, что он может загрузить магазин прямо сейчас. Для этого я следовал этому руководству (http://docs.sencha.com/extreact/6.5.0/guides/extreact_stores_in_flux.html). Но я получаю эту ошибку:

Uncaught Error: Reducer "usershortcuts" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined. 

Итак, это самые важные части кода:

  1. index.js (точка входа):

    const store = configureStore();
    
    /* Calling of actions. */
    store.dispatch(usershortcutFetchDataThroughStore());
    
      launch(
      <Provider store = {store}>
          <HashRouter>
            <Switch>
    
             {/* <Route path="/" name="Home" component={TextEditor}/>*/}
              <Route path="/" name="Home" component={Full}/>
            </Switch>
          </HashRouter>
      </Provider>
    );
    
  2. Мой редуктор:

export function usershortcuts(state = initialState, action){
        switch(action.type){
            case types.USER_SHORTCUT_FETCH_DATA_SUCCESS:
                return[...state];
        }
}
  1. Мое исходное состояние:
export default {
    /* User shortcuts store. */
    userShortCutStore: new Ext.data.Store({
        model: userShortcutModel,
        autoLoad: true,
        pageSize: 10,
        proxy: {
            type: 'ajax',
            reader: {
                type: 'json'
            },
            url: '/usershortcut/all/'
        }
    })
}
  1. Настроить магазин:
export default function configureStore() {
    return createStore(
        rootReducer,
        initialState,

        // Apply thunk middleware and add support for Redux dev tools in Google Chrome
        process.env.NODE_ENV !== "production" && window.devToolsExtension ?
            compose(applyMiddleware(thunk), window.devToolsExtension())
            :
            applyMiddleware(thunk)
    );
}
2
0
2 415
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На вашем редукторе вам нужно вернуть состояние по умолчанию, а также вы не можете оставить состояние как undefined, поэтому вам нужно установить начальное состояние как минимум на нулевое значение

const initialState = null;
export function usershortcuts(state = initialState, action){
        switch(action.type){
            case types.USER_SHORTCUT_FETCH_DATA_SUCCESS:{
                return[...state];
            }
            default:{
               return state // We return the default state here
            }
        }
}

Одна часть вашего решения, я думаю, может сработать, и это касается состояния по умолчанию, а initialState уже определен, и я экспортировал в отдельный файл ...

Милош Рајковић 11.04.2018 14:28

@ milosKomiRajkovic94 протестируйте это и дайте мне знать

Abslen Char 11.04.2018 14:30

Другие вопросы по теме