在 React 中集成 Redux-Persist 的指南

阅读时长 8 分钟读完

Redux 是一个常用的状态管理库,React 是一个常用的前端框架。Redux 在 React 中使用非常方便,但是有一个问题:当用户刷新页面时,Redux 的状态会丢失。为了解决这个问题,Redux-Persist 库应运而生,它可以将 Redux 的状态持久化到本地存储中。本文将详细介绍如何在 React 中集成 Redux-Persist。

安装 Redux 和 Redux-Persist

在使用 Redux-Persist 之前,需要先安装 Redux 和 Redux-Persist。可以使用 npm 或者 yarn 安装它们:

或者

创建 redux store

创建 Redux 的 store 和普通的创建方式一样,但是需要使用 Redux-Persist 的 persistReducer 方法包装 reducer。下面是一个示例:

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

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

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

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

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

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

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

在这个示例中,persistReducer 方法接收一个配置对象和一个原始 reducer,返回一个新的 reducer。配置对象中有一个 key 属性表示存储的键名,storage 属性指定存储方式,这里使用 localStorage。

然后将新的 reducer 传给 createStore 方法来创建 Redux 的 store。

创建 persistor

为了管理 Redux 的持久化状态,需要创建一个 persistor 对象,并将 store 对象传给它。下面是一个示例:

在 React 中使用 store 和 persistor

现在 Redux 的 store 和 persistor 已经创建好了,如何在 React 中使用它们呢?

一般来说,在应用的根组件中使用 Provider 组件将 store 传递给子组件,示例代码如下:

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

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

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

现在需要使用 PersistGate 组件来封装 Provider 组件,并传递 persistor 对象。PersistGate 会在 store 加载完成后再加载应用程序。示例代码如下:

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

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

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

在这个示例中,PersistGate 组件接收 loading 属性,表示在 store 加载完成前显示的内容。

至此,Redux-Persist 的集成已经完成了。现在可以在 Redux 的状态中存储数据,在刷新页面后仍然可以保留数据。

示例

下面是一个示例,展示如何在 Redux 的状态中存储一个计数器的数据并在应用程序中进行操作,即使刷新页面也可以保留数据。

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

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

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

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

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

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

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

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

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

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

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

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

总结

在 React 中集成 Redux-Persist 可以使 Redux 的状态持久化到本地存储中,从而解决了当用户刷新页面时 Redux 状态丢失的问题。本文介绍了 Redux-Persist 在 React 中的集成及示例,希望可以帮助读者更好地理解及应用 Redux。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64add12248841e98949d0ca4

纠错
反馈