使用Redux-Thunk时为何需要调用两次dispatch?
为什么Redux-Thunk里需要两次dispatch?
这两次dispatch的作用完全不同,本质是Redux-Thunk中间件的工作机制决定的:
1. 组件里的dispatch(fetchUsers()):触发异步逻辑的入口
fetchUsers()返回的不是普通的action对象,而是一个函数(这就是Thunk的核心特性)。当你调用dispatch(fetchUsers())时,Redux-Thunk中间件会拦截这个函数,自动执行它,并把Redux原生的dispatch方法作为参数传给它。
简单说:这一步是告诉Redux“启动这个异步请求流程”。
2. Thunk函数内部的dispatch(xxx):更新Store状态
在fetchUsers返回的函数里,你调用的dispatch(fetchUserRequest())、dispatch(fetchUserSuccess(users))这些,是分发普通的action对象(比如请求开始、成功、失败的action)。这些action会被Redux的reducer处理,从而更新Store里的状态(比如标记请求加载中、保存用户数据、记录错误信息)。
举个完整流程:
- 组件调用
dispatch(fetchUsers()),Thunk执行内部函数 - 先
dispatch(fetchUserRequest()):通知Store“请求开始了,把状态改成加载中” - 发起axios请求,成功后
dispatch(fetchUserSuccess(users)):通知Store“请求成功,把用户数据存进去” - 如果失败,
dispatch(fetchUserFailure(errorMsg)):通知Store“请求失败,记录错误信息”
没有内部的这些dispatch,异步请求的不同阶段状态就无法同步到Store里;而没有组件里的那次dispatch,Thunk函数根本不会被执行。
内容的提问来源于stack exchange,提问作者Precious
相关产品推荐
相关产品推荐

