给定操作“ LoadEntries”,减速器“ entries”返回未定义。

时间:2019-01-04 03:43:10

标签: reactjs redux redux-thunk reducers

运行应用程序时,出现以下错误。

  

错误:给定操作“ LoadEntries”,还原器“ entries”返回   未定义。要忽略某个动作,您必须显式返回   以前的状态。如果您希望该减速器不具有任何价值,则可以   返回null而不是未定义。

以下是操作文件。

import axios from 'axios';

export const loadEntries = () => {

     return dispatch => {

        axios.get('https://jsonplaceholder.typicode.com/posts')
             .then(res => {
                dispatch({type: 'LoadEntries', payload: res.data});
            }).catch(error => {
                console.error("Error: " + error);
             })    
    }
}

以下是减速器。

export default (state = [], action) => {

    console.log("Action: " + JSON.stringify(action) + " State: " + state);
    switch (action.type) {
        case 'LoadEntries':
            return action.payload;
        default:
            return state;
    }
}

当我运行该应用程序时,我在reducer的控制台中获得以下登录信息。

  

操作:{“ type”:“ LoadEntries”}状态:

以下是Index.js文件。

import React from 'react';
import ReactDOM from 'react-dom';
import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import {Provider} from 'react-redux'
import reducer from './store/reducer';
import App from './App';
import { BrowserRouter } from 'react-router-dom';

const store = createStore(reducer, applyMiddleware(thunk));


ReactDOM.render(
    <Provider store={store}>
        <BrowserRouter>
            <App />
        </BrowserRouter>
    </Provider>,

    document.getElementById('root'));

还附有控制台的屏幕截图。

console screenshot

谢谢。

1 个答案:

答案 0 :(得分:0)

您不会在动作分派器中同时针对已解决的承诺的兑现或拒绝返回动作。

您的调度员应始终返回一个动作。

我还建议通过单独的操作处理拒绝。