npm 包 @charliehess/redux-persist 使用教程

阅读时长 6 分钟读完

如果你是一位前端开发者,你一定对使用Redux来管理状态非常熟悉。Redux是一种流行的状态管理库,但是在浏览器刷新或页面重载时,Redux存储的状态将被清空。这里就可以使用一个npm包 @charliehess/redux-persist来处理这个问题。

什么是 @charliehess/redux-persist

@charliehess/redux-persist是一种Redux的持久化存储方案,可以让你存储你的应用程序状态,以便在浏览器刷新时不会丢失状态。

安装

在使用该npm包前,首先需要安装它。

在命令行中输入以下命令:

使用步骤

1. 创建Redux store

在使用@charliehess/redux-persist的过程中,需要对Redux store进行修改。我们需要先创建Redux store,并将其传递给@charliehess/redux-persist以进行状态持久化。

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

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

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

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

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

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

在上面的示例中,我们使用了persistReducer函数将我们的rootReducer转换为经过持久化的reducer。我们还使用了redux-persist提供的storage以存储数据。通过在创建store时,我们将persistedReducer传递给store即可。

2. 嵌套应用程序

如果你的Redux store嵌套在一个应用程序之中,你需要将@charliehess/redux-persist的PersistGate组件嵌套在你的应用程序组件中以确保状态成功持久化。

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

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

在上面的示例中,我们将PersistGate组件嵌套在Provider组件中。PersistGate组件接受两个属性:loading和persistor。loading属性接受一个组件用于展示加载状态,我们在这里设置为null。persistor属性接受我们之前导出的persistor。

3. 配置持久化

最后,我们需要告诉@charliehess/redux-persist要在我们的应用程序中哪些状态是需要被持久化的。我们添加persistConfig配置对象来配置我们的持久化。在persistConfig中,我们需要传递key和Blacklist/Whitelist。

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

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

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

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

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

在上面的示例中,我们在persistConfig中添加了blacklist对象,告诉redux-persist不要持久化user reducer的状态。如果我们要持久化特定的状态,可以使用whitelist。

深度解析

现在我们已经知道如何使用@charliehess/redux-persist持久化redux store。但是,我们需要更深入地理解它,以便我们可以更好地使用和调试它。redux-persist的基本工作原理是将我们的Redux store中的状态序列化为JSON字符串,并将其保存在localStorage中。每次页面重新加载时,redux-persist会检索存储在localStorage中的任何持久化的状态,并将其反序列化为一个JavaScript对象,以便再次将其存储在我们的Redux store中。

持久化的位置

默认情况下,redux-persist将持久化数据存储在localStorage中。但是,有多个存储引擎可用,包括AsyncStorage(React Native)和缓存插件等。

如果你想更改存储引擎来存储状态或更改默认的本地存储键,请参阅@charliehess/redux-persist文档。

Blacklist和Whitelist

在redux-persist的配置中,我们使用黑名单和白名单来确定哪些状态变量将被持久化,哪些不会。

使用黑名单,我们可以告诉redux-persist不要持久化某些状态变量。相反,使用白名单,我们可以明确告诉redux-persist只要持久化某些特定的状态变量,而不是进行全局持久化。

加密数据

默认情况下,redux-persist不会对存储的状态数据进行加密。但是在某些情况下,可能需要在存储状态之前对其进行加密。

在redux-persist的配置中,我们可以提供一个transformers选项列表,并将所有我们希望在存储状态之前应用的转换器添加到该列表中。可以使用的转换器包括加密和解密转换器。

总结

使用@charliehess/redux-persist,我们可以轻松地将我们的Redux store中的状态持久化,以便在浏览器刷新后恢复其状态。我们可以通过添加whitelist或blacklist进行状态持久化和过滤,也可以使用transformers对数据进行加密。

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

纠错
反馈