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

问题描述

特定操作功能出现以下错误:

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

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

反应组件文件:

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。

标签: reactjsredux-thunkredux-actions

解决方案


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

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

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

 connect(mapStateToProps, { yourActionCreator })(Component);

推荐阅读