当使用 Redux 和 Redux-Saga 来管理应用程序的状态时,我们可能需要在执行异步操作时访问状态或存储中的数据。本文将介绍如何在 Redux-Saga 函数内获取状态或存储中的数据。
状态和存储
Redux 中的状态表示应用程序的数据。状态是不可变的,必须通过 Redux 的 store.dispatch()
方法来更新。Redux 中的存储是一个包含状态和一些方法的对象,可以使用 createStore()
方法来创建。在 Redux-Saga 中,我们可以使用 select()
方法来获取当前的状态。
在 redux-saga 函数中访问状态
Redux-Saga 提供了多个用于访问状态的方法。其中最常用的方法是 select()
。select()
接受一个函数作为参数,并将该函数应用于存储中的状态。例如,以下代码片段演示了如何在 Redux-Saga 函数中使用 select()
获取存储中的计数器值:
import { select } from 'redux-saga/effects'; function* mySaga() { const counter = yield select(state => state.counter); console.log(`Counter value is ${counter}`); }
在上面的代码中,我们首先导入了 select
方法。然后,我们定义了一个名为 mySaga
的 Redux-Saga 函数。在这个函数内,我们使用 yield select()
语句来获取存储中的 counter
值。接着,我们使用 console.log()
打印计数器的值。请注意,在 select()
中,我们传递了一个函数作为参数,该函数将存储对象作为参数,并返回需要访问的属性。
示例代码
以下是一个使用 Redux 和 Redux-Saga 的示例计数器应用程序。该应用程序包含两个按钮,用于增加和减少计数器的值。在每次点击按钮时,Redux-Saga 函数都会被调用。在这个函数内,我们使用 select()
方法来获取存储中的计数器值。
-- -------------------- ---- ------- -- ------------ ------ ----- ---- -------- ------ -------- ---- ------------ ------ - -------- - ---- -------------- ------ - ------------ --------------- - ---- -------- ------ -------------------- ---- ------------- ------ --- ---- ------------------- ------ ------- ---- ------------- ------ ------ ---- ---------- ----- -------------- - ----------------------- ----- ----- - ------------ -------- -------------------------------- -- --------------------------- ---------------- --------- -------------- ---- -- ------------ -------------------------------- --
-- -------------------- ---- ------- -- --------------------- ------ ----- ---- -------- ------ - ------- - ---- -------------- ------ - ---------- --------- - ---- ------------- ----- --- ------- --------------- - -------- - ----- - -------- ---------- --------- - - ----------- ------ - ----- ------------ -------------- ------- -------------------------------------- ------- -------------------------------------- ------ -- - - ----- --------------- - ----- -- -- -------- -------------- --- ----- ------------------ - - ---------- ---------- -- ------ ------- -------- ---------------- ------------------- -------
-- -------------------- ---- ------- -- --------------------- ------ - --------------- - ---- -------- ------ - ---------- --------- - ---- --------------- ----- ------------ - - -------- -- -- ----- -------------- - ------ - --------------------- ------- -- - ------ ------------- - ---- ---------- ------ ----- - -- ---- ---------- ------ ----- - -- -------- ------ ------ - -- ------ ------- ----------------- -------- --------------- ---
-- -------------------- ---- ------- -- ------------------ ------ - ---------- ---- ------ - ---- --------------------- ------ - ---------------- --------------- - ---- --------------- ------ - ---------- --------- - ---- ------------- --------- ---------------- - ----- ----------------- ----- ------- - ----- ------------ -- --------------- -------------------- ----- -- ------------- - - ----------------------------------------------------------- -------- ----------------------------------------------------------------------------------