给定动作“LoadEntries”,reducer“entries”返回未定义。

Posted

技术标签:

【中文标题】给定动作“LoadEntries”,reducer“entries”返回未定义。【英文标题】:Given action "LoadEntries", reducer "entries" returned undefined. 【发布时间】:2019-05-30 16:00:35 【问题描述】:

当我运行我的应用程序时,我收到以下错误。

错误:给定动作“LoadEntries”,reducer “entries”返回 不明确的。要忽略某个操作,您必须显式返回 以前的状态。如果你希望这个减速器没有价值,你可以 返回 null 而不是 undefined。

下面是动作文件。

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);
             )    
    

下面是reducer。

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

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

当我运行应用程序时,我得到以下减速器登录控制台。

动作:"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'));

还附上控制台截图。

谢谢。

【问题讨论】:

我在您的代码中没有发现任何问题。你能分享一下调用动作的代码吗 【参考方案1】:

您不会在动作调度程序内对 promise 的 resolve 或 reject 都返回动作。

您的调度程序应始终返回一个操作。

我还建议在单独的操作中处理拒绝。

【讨论】:

以上是关于给定动作“LoadEntries”,reducer“entries”返回未定义。的主要内容,如果未能解决你的问题,请参考以下文章

Redux - reducer 与动作的关系

Redux 动作/reducers 与直接设置状态

map-reduce 中不同组件/动作的执行顺序

React Redux:动作创建者不调用reducer

在 Redux 中,如果所有 reducer 在动作触发时都被调用,那么是啥阻止了动作之间可能的命名冲突?

reducer.state.props 在嵌套动作 react/redux 中未定义