如何在 redux-saga 函数内获取状态或存储中的数据?

当使用 Redux 和 Redux-Saga 来管理应用程序的状态时,我们可能需要在执行异步操作时访问状态或存储中的数据。本文将介绍如何在 Redux-Saga 函数内获取状态或存储中的数据。

状态和存储

Redux 中的状态表示应用程序的数据。状态是不可变的,必须通过 Redux 的 store.dispatch() 方法来更新。Redux 中的存储是一个包含状态和一些方法的对象,可以使用 createStore() 方法来创建。在 Redux-Saga 中,我们可以使用 select() 方法来获取当前的状态。

在 redux-saga 函数中访问状态

Redux-Saga 提供了多个用于访问状态的方法。其中最常用的方法是 select()select() 接受一个函数作为参数,并将该函数应用于存储中的状态。例如,以下代码片段演示了如何在 Redux-Saga 函数中使用 select() 获取存储中的计数器值:

------ - ------ - ---- ---------------------

--------- -------- -
  ----- ------- - ----- ------------ -- ---------------
  -------------------- ----- -- -------------
-

在上面的代码中,我们首先导入了 select 方法。然后,我们定义了一个名为 mySaga 的 Redux-Saga 函数。在这个函数内,我们使用 yield select() 语句来获取存储中的 counter 值。接着,我们使用 console.log() 打印计数器的值。请注意,在 select() 中,我们传递了一个函数作为参数,该函数将存储对象作为参数,并返回需要访问的属性。

示例代码

以下是一个使用 Redux 和 Redux-Saga 的示例计数器应用程序。该应用程序包含两个按钮,用于增加和减少计数器的值。在每次点击按钮时,Redux-Saga 函数都会被调用。在这个函数内,我们使用 select() 方法来获取存储中的计数器值。

-- ------------

------ ----- ---- --------
------ -------- ---- ------------
------ - -------- - ---- --------------
------ - ------------ --------------- - ---- --------
------ -------------------- ---- -------------

------ --- ---- -------------------
------ ------- ---- -------------
------ ------ ---- ----------

----- -------------- - -----------------------
----- ----- - ------------
  --------
  --------------------------------
--

---------------------------

----------------
  --------- --------------
    ---- --
  ------------
  --------------------------------
--
-- ---------------------

------ ----- ---- --------
------ - ------- - ---- --------------

------ - ---------- --------- - ---- -------------

----- --- ------- --------------- -
  -------- -
    ----- - -------- ---------- --------- - - -----------
    ------ -
      -----
        ------------ --------------
        ------- --------------------------------------
        ------- --------------------------------------
      ------
    --
  -
-

----- --------------- - ----- -- --
  -------- --------------
---

----- ------------------ - -
  ----------
  ----------
--

------ ------- --------
  ----------------
  -------------------
-------
-- ---------------------

------ - --------------- - ---- --------
------ - ---------- --------- - ---- ---------------

----- ------------ - -
  -------- --
--

----- -------------- - ------ - --------------------- ------- -- -
  ------ ------------- -
    ---- ----------
      ------ ----- - --
    ---- ----------
      ------ ----- - --
    --------
      ------ ------
  -
--

------ ------- -----------------
  -------- ---------------
---
-- ------------------

------ - ---------- ---- ------ - ---- ---------------------
------ - ---------------- --------------- - ---- ---------------
------ - ---------- --------- - ---- -------------

--------- ---------------- -
  ----- -----------------
  ----- ------- - ----- ------------ -- ---------------
  -------------------- ----- -- -------------
-

- ----------------------------------------------------------- --------
---------------------------------------------------------------------------------------