介绍
@redux-saga/core 是一个用于处理 Redux 应用中异步操作的库,它提供了一种简单的方式来管理副作用。本文将会介绍如何使用 @redux-saga/core,让您了解如何在 Redux 应用中优雅地处理异步逻辑和副作用。
安装
要使用 @redux-saga/core,您需要先安装它。您可以通过以下命令来安装:
npm install @redux-saga/core
使用
@redux-saga/core 提供了一组 API,用于定义和管理 Sagas。在创建 Saga 时,您可以使用以下形式:
import { takeEvery } from 'redux-saga/effects' function* mySaga() { yield takeEvery("USER_FETCH_REQUESTED", fetchUser); }
在上面的代码中,我们定义了一个 Saga,它会监听 "USER_FETCH_REQUESTED" 的 action,然后调用 fetchUser 方法。
Generator Functions
在 @redux-saga/core 中定义的 Saga 是以 Generator 函数的形式定义的。Generator 函数是一种特殊类型的函数,它通过使用 yield 关键字来控制流程。
例如,可以在 Saga 中使用以下代码来调用一个异步 API:
-- -------------------- ---- ------- ------ - ----- ---- --------- - ---- -------------------- ------ --- ---- ----- --------- ----------------- - --- - ----- ---- - ----- ------------------- ----------------------- ----- ---------- ----------------------- ----- ------- - ----- --- - ----- ---------- -------------------- -------- ------------ - - --------- -------- - ----- --------------------------------- ----------- -
在上面的代码中,我们调用了 Api.fetchUser,如果它成功的话,会向 Store 发送一个 USER_FETCH_SUCCEEDED 的 action;如果失败的话,会发送一个 USER_FETCH_FAILED 的 action。
Effect
在 @redux-saga/core 中,可以使用 Effect 来管理副作用。Effect 是一个简单的 JavaScript 对象,它描述了应该在 Saga 中执行的操作。以下是 @redux-saga/core 中可用的 Effect 列表:
take
takeEvery
takeLatest
put
call
apply
cps
fork
spawn
join
cancel
select
actionChannel
flush
cancelled
retry
Effect 可以组成 Sagas,Sagas 是通过一个主循环执行的,这个循环以一种非阻塞的方式运行。例如,以下是一个简单的 Saga,它将取消之前启动的计时器并启动一个新的计时器。
-- -------------------- ---- ------- ------ - ----- ---------- ----------- ----- ------- ---- - ---- -------------------- -- ------ -------- --------- ------------------ - --- ---- - - -------- - -- -- ---- - ----- ----------- ----- ----- ----- ----- -------- -------- - -- - - --------- ----------- - --- ---- ----- ------ - ----- - ------- - - ----- ------------------- -- ------ - ----- ------------ - ---- - ----- --------------- -------- - -
在上面的代码中,我们定义了一个 Saga,它监听 START_TIMER 的 action,一旦收到该 action,就会启动一个计时器。
总结
在本文中,我们介绍了如何使用 @redux-saga/core 来管理 Redux 应用中的异步操作和副作用。我们看到了如何定义 Saga、如何使用 Generator 函数,以及如何使用 Effect。希望本文能帮助您更好的理解和使用 @redux-saga/core。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/165176