Redux Thunk或Redux Saga怎么处理redux的异步action
时间: 2024-10-04 22:02:26 浏览: 56
Redux Thunk和Redux Saga都是为了在Redux中处理异步操作而设计的中间件,它们各自有其特点和使用场景:
**Redux Thunk**:
Thunk是一个简单的中间件,它允许你在action creators内部返回一个函数(而不是一个普通Action对象)。这个函数可以在执行之前做一些准备工作,比如检查权限、发起网络请求等。当你调用这个函数时,它会被当作一个常规的函数执行,如果该函数返回的是一个Promise,那么当Promise状态改变时,会自动引发后续的action序列来更新状态。
```javascript
const fetchUser = () => dispatch =>
axios.get('api/user')
.then(response => dispatch({ type: USER_FETCHED, payload: response.data }))
.catch(error => dispatch({ type: USER_FETCH_FAILED, error }));
```
在这个例子中,`fetchUser`是一个Thunk action creator,它在axios请求成功或失败后触发相应类型的actions。
**Redux Saga**:
Saga则更像一种事件驱动的工作流管理工具,它通过Generator函数来处理一系列异步操作,每个yield关键字表示一个行动步骤,可以暂停任务直到某个条件满足,然后继续执行。Sagas提供了更好的错误处理和调度能力,更适合复杂的异步逻辑,比如需要处理多个并发请求的情况。
```javascript
import { takeEvery, call, put } from 'redux-saga/effects';
function* fetchUser(action) {
try {
const user = yield call(api.fetchUser);
yield put({ type: USER_FETCHED, payload: user });
} catch (error) {
yield put({ type: USER_FETCH_FAILED, error });
}
}
// 使用takeEvery监听USER_REQUEST action
export default function* rootSaga() {
yield takeEvery(USER_REQUEST, fetchUser);
}
```
在这里,`fetchUser` saga会在每次接收到USER_REQUEST时启动,执行一系列异步操作并管理它们。
阅读全文
相关推荐


















