React Thunk 是一个中间件,允许您编写返回函数而不是操作对象的操作创建器。这对于处理异步操作(例如 API 请求)或复杂的同步逻辑(例如操作的条件分派)非常有用。返回的函数接收dispatch和getState作为参数,允许您调度其他操作或访问函数内的当前状态。
以下是如何在 React 应用程序中使用 redux-thunk 的基本示例:
// Action Creator with Thunk export const fetchUser = () => { return async (dispatch) => { dispatch({ type: 'FETCH_USER_REQUEST' }); try { const response = await fetch('/api/user'); const data = await response.json(); dispatch({ type: 'FETCH_USER_SUCCESS', payload: data }); } catch (error) { dispatch({ type: 'FETCH_USER_FAILURE', payload: error }); } }; };
React Saga是一个中间件,允许您使用生成器函数以更有组织的方式处理副作用。它不像 Thunk 那样返回函数,而是使用“效果”系统来管理异步操作并控制逻辑流程。 Sagas 是长时间运行的后台进程,可以侦听分派的操作并执行 API 调用、数据获取和其他任务等副作用。
这是如何使用 redux-saga 的基本示例:
import { call, put, takeLatest } from 'redux-saga/effects'; // Worker saga: will be fired on FETCH_USER_REQUEST actions function* fetchUser(action) { try { const response = yield call(fetch, '/api/user'); const data = yield response.json(); yield put({ type: 'FETCH_USER_SUCCESS', payload: data }); } catch (e) { yield put({ type: 'FETCH_USER_FAILURE', message: e.message }); } } // Watcher saga: spawns a new fetchUser task on each FETCH_USER_REQUEST function* mySaga() { yield takeLatest('FETCH_USER_REQUEST', fetchUser); } export default mySaga;
方面 | React Thunk | React Saga |
---|---|---|
概念 | 返回动作创建者中的函数 | 使用生成器函数产生副作用 |
学习曲线 | 更容易学习和使用 | 由于生成器而具有更高的学习曲线 |
异步流程 | 处理简单的异步逻辑 | 更适合复杂的异步工作流程 |
代码结构 | 结构较少,在大型应用程序中可能会变得混乱 | 提供清晰、结构化的方法 |
测试 | 测试可能更具挑战性 | 由于生成器而更容易测试 |
用例 | 简单的异步逻辑,API 请求 | 复杂流程(例如序列、重试) |
表现 | 轻的 | 更强大,但开销稍大 |
使用 React Thunk if:
使用 React Saga 如果:
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3