reactjs - 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。
解决方案
export function resetActionType() {
return dispatch => {
dispatch({
type: 'RESET_ACTION_TYPE',
});
};
}
如果您设置 redux-thunk 中间件,则使用此语法。redux-thunk 的目的是发出异步请求,一旦请求得到解决,它就会分派响应数据。这就是为什么dispatch
传递一个论点。由于您在动作创建者中没有异步代码,因此您必须返回一个普通对象。
当您连接到商店时,调度已经将调用该动作生成器。
connect(mapStateToProps, { yourActionCreator })(Component);
推荐阅读
- microsoft-graph-api - 有没有办法使用 Outlook Rest API 列出用户的共享邮箱?
- javascript - 如何使用 jQuery 调用 vbscript 函数?
- regex - 将提取的文本字符串转换为 Postgres 中字符串长度不同的日期
- android - Using Firebase in a multi-module project
- xslt-1.0 - How to remove Namespaces when copying nodes to a different node in XML through XSLT1.0?
- javascript - 有什么方法可以与 graphql 查询字段相反?
- python - About custom operations in Tensorflow and PyTorch
- javascript - Having pagination issue in Vue / Laravel
- php - Laravel AdminLTE - How to call method and use its data in view
- git - 在gerrit中重命名一个分支