【发布时间】:2022-01-17 09:43:47
【问题描述】:
我最近开始研究 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 函数。 registerUser 中的 console.log("HERE") 语句已执行,但返回方法中的日志均未执行。我错过了什么?
附带问题,不如上一个重要:现在我使用的是 Thunks,我的所有操作都需要是 thunk 吗?还是可以将 thunk 和动作组合在一起,这些动作总是纯 js 对象,不需要异步处理?
谢谢
【问题讨论】:
-
只是一个旁注。自从 react 钩子和更新的状态管理库(如 zustand)出现以来,就没有使用过 redux 和 thunk。轻松多了。
-
一般仅供参考:您在这里编写了一种非常古老的 Redux 风格。 Modern Redux 大约只有四分之一的代码,不使用 switch..case reducers、ACTION_TYPES、createStore 或 connect。我强烈建议您查看redux.js.org/tutorials/essentials/part-1-overview-concepts 的官方 Redux 教程,并首先了解现代 Redux。该教程还将介绍诸如 thunk 之类的内容。
-
@SILENT 天哪,我刚刚用 Zusand 替换了 redux。它非常直截了当,到目前为止我都喜欢它。感谢您的建议
标签: reactjs redux react-redux redux-thunk react-thunk