reactjs - 错误:操作必须是普通对象。使用自定义中间件进行异步操作。但我没有异步功能
问题描述
我真的很困惑!!
所以,我想在动作中调度另一个动作:
import * as actionsTypes from '../constants/actionsTypes';
export const loginUserSuccess = userName => ({
type: actionsTypes.LOGIN_SUCCESS,
userName
});
export const loginUserFailed = () => ({
type: actionsTypes.LOGIN_FAILED
});
export const loginUser = userName => dispatch => {
dispatch(loginUserSuccess(userName));
}
在 loginUser 操作中,我将创建一个逻辑来选择要分派的操作。现在没关系
这是 loginUser 操作的用法
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { loginUser } from '../../actions';
class loginUserForm extends Component {
state = {
userName: ''
}
inputChangeHandler = event => {
this.setState({ userName: event.target.value })
}
loginUserHandler = event => {
event.preventDefault();
this.props.loginUser(this.state.userName);
}
render() {
return (
<form className="login-user" onSubmit={event => this.loginUserHandler(event)}>
<input type="text" onChange={event => this.inputChangeHandler(event)} />
<input type="submit" value="Login" disabled={this.state.userName.length === 0} />
</form>
)
}
};
const mapDispatchToProps = dispatch => ({
loginUser: userName => dispatch(loginUser(userName))
})
没有什么超自然的:) 但是!!我有一个错误
动作必须是普通对象。使用自定义中间件进行异步操作。
这真的很有趣!我这里没有异步代码!!
到底是怎么回事……
解决方案
loginUser()
是“重击”。这意味着它实际上是在将一个函数传递给 real store.dispatch()
,而不是一个普通的动作对象。
确保您实际上已将redux-thunk
中间件包含在您的商店设置过程中 - 它教导商店接受将函数传递给store.dispatch()
. 查看帖子什么是“thunk”?和Redux 中的 Thunks: The Basics来解释这意味着什么。
此外,作为旁注,您可以稍微简化该文件。 connect
支持定义的“对象速记” mapDispatch
- 您可以直接传递一个充满动作创建者的对象,例如:
const mapDispatch = {loginUser};
推荐阅读
- angular - After Installing @zxing/library in ionic3, There is an error. How Can I solve?
- android - Migration to AndroidX causes hundreds of Jetifier failures
- javascript - Im doing POST method to my API using EXPRESS ROUTER and this does not work
- angularjs - 将 MSAL AngularJS 与 Azure B2C 结合使用时,不会调用 tokenReceivedCallback
- html - Do two sibling elements have to be of the same type for their margins to collapse?
- r - 如何在单行数据集上使用 spread 和 group_by
- angular-material - How to show Mat-dialog opening/loading indicator
- python - multiple columns with same header tallying within pandas across multiple sheets/dataframes
- java - 如何将 arraylist 保存在 txt 中并加载存储在那里的内容?
- c# - 如何将bmp(图像)保存到文件