我最近开始研究 redux thunk。据我了解,它应该用于处理异步操作或需要从其他操作中调度操作的地方。所以我的商店配置如下:
import {applyMiddleware, createStore} from "redux";
import rootReducer from "./rootReducer";
import thunk from "redux-thunk";
import { composeWithDevTools } from 'redux-devtools-extension'; // used by redux-devtools to visualize redux in browser
const store = createStore(rootReducer, composeWithDevTools(
applyMiddleware(thunk),
// other store enhancers if any
));
export default store;
我的减速器看起来像:
const INITIAL_STATE = {
user: null,
}
export const authReducer = (state = INITIAL_STATE, action) => {
switch (action.type) {
case actionTypes.REGISTER_NEW_USER:
const newUser = action.payload
return {
...state,
'user': newUser
}
default:
return state;
}
}
我的 thunk 如下(请注意,为了简单起见,我注释掉了进行异步调用的部分,而我只是测试了我的 thunk 的功能):
// Thunks
export const registerUser = (userData) => {
console.log("HERE")
return async (dispatch) => {
let user = new User();
try {
let newUserData;
console.log(userData)
// newUserData = await user.register(userData);
newUserData = {
'email': 'asdas@gmail.com',
'token': '234jk23hjkhaSDASD',
}
console.log("here in thunk")
console.log(newUserData)
cookie.set("user", newUserData.email);
cookie.set("token", newUserData.token);
// dispatch(createNewUser(newUserData));
dispatch({
type: actionTypes.REGISTER_NEW_USER,
payload: newUserData
})
} catch(e) {
console.log(e);
}
}
}
和我的组件:
const dispatch = useDispatch();
const onSubmit = data => {
dispatch(registerUser(data));
}
我已经为这些编写了一些测试,但是在执行它们时,它们似乎没有运行 thunk 函数。in 中的console.log("HERE")语句registerUser已执行,但 return 方法中的任何日志均未执行。我错过了什么?
附带问题,不如前一个重要:现在我正在使用 Thunks,我的所有操作都需要是一个 thunk 吗?还是可以将 thunk 和动作组合在一起,这些动作总是纯 js 对象,不需要异步处理?
谢谢