Redux thunk - 错误 · 动作必须是普通对象。使用自定义中间件进行异步操作,即使调度具有键类型的对象

Posted

技术标签:

【中文标题】Redux thunk - 错误 · 动作必须是普通对象。使用自定义中间件进行异步操作,即使调度具有键类型的对象【英文标题】:Redux thunk - Error · Actions must be plain objects. Use custom middleware for async actions even with dispatch an object with key type 【发布时间】:2021-03-02 00:08:43 【问题描述】:

特定动作函数出现以下错误:

错误 · 动作必须是普通对象。使用自定义中间件进行异步 行动

以下代码在我的系统上运行良好,但在 bugsnag 上为不同的用户记录错误。

React 组件文件:

import React,  Fragment, useEffect, useState, useRef  from 'react';
import  useSelector, useDispatch  from 'react-redux';

 const dispatch = useDispatch();
 const handleTabs = tab => 
    dispatch(resetActionType());
    tabChanged(tab);
  ;

动作文件:

export function resetActionType() 
  return dispatch => 
    dispatch(
      type: 'RESET_ACTION_TYPE',
    );
  ;

检查关于 SO 的不同问题我可以理解当我们不使用调度或在调度返回的对象中键入键时出现此错误。 但我正在做这两件事。

并非所有机器/操作系统/浏览器都发生错误。 仅供少数用户使用。

上面的代码有什么问题?任何指导将不胜感激。

不是每个动作都会发生这种情况,所以我猜配置没问题。

更新:

我正在使用 redux thunk。

【问题讨论】:

【参考方案1】:
export function resetActionType() 
  return dispatch => 
    dispatch(
      type: 'RESET_ACTION_TYPE',
    );
  ;

如果您设置 redux-thunk 中间件,则使用此语法。 redux-thunk 的目的是发出异步请求,一旦请求得到解决,它就会分派响应数据。这就是为什么 dispatch 被传递了一个参数。由于您在动作创建器中没有异步代码,因此您必须返回一个普通对象。

当您连接到商店时,dispatch 已经会调用该动作生成器。

 connect(mapStateToProps,  yourActionCreator )(Component);

【讨论】:

我正在使用 redux thunk。

以上是关于Redux thunk - 错误 · 动作必须是普通对象。使用自定义中间件进行异步操作,即使调度具有键类型的对象的主要内容,如果未能解决你的问题,请参考以下文章

动作必须是普通对象。 Redux 不工作

尝试使用 redux-thunk,但它显示错误,即使对我来说一切都很好

在调用另一个动作创建者之前等待动作创建者完成 - Redux thunk

成功或错误后如何使用 redux thunk 重定向?

使用 axios 的 redux-thunk 的通用数据加载器

如何重构 redux + thunk 动作/常量