在前端开发中,Redux 已经成为了非常常用的数据流管理库。Redux 提供了一些特性方便我们在应用中管理状态,但是,当我们需要将这些状态保存在本地时,就需要使用 Redux 持久化插件。本文将详细介绍 Redux 持久化插件的使用方法,并提供示例代码帮助读者更好地理解。
Redux 持久化简介
Redux 持久化可以让我们将 store 中的状态保存在本地,这样我们就可以在页面刷新后仍然可以访问这些已经保存的状态。
Redux 持久化插件通过将我们定义的 reducer 返回的 state 保存到本地存储中,可以将 store 中的状态还原到之前的状态。
安装和使用
使用 Redux 持久化插件需要先安装:
npm install redux-persist
安装完毕后,在我们的应用中引入 redux-persist 的 persistReducer 和 persistStore 方法。
import { persistReducer, persistStore } from 'redux-persist';
然后,在我们定义我们的 reducer 时,使用 persistReducer 将其包裹,返回新的 reducer。persistReducer 接受一个配置对象作为参数,用于指定哪些 reducer 的 state 需要持久化。
-- -------------------- ---- ------- ------ - --------------- - ---- -------- ------ - -------------- - ---- ---------------- ------ ------- ---- ---------------------------- -- -- ------------ -- -- ------ ---- -------- ----- ----------- - ----------------- --------- -------- --- ----- ------------- - - ---- ------- -------- ---------- ------------- -- ----- -------- -- ----- -- ----- ---------------- - ----------------------------- -------------
在 configureStore 中,我们可以使用 persistStore 方法来创建一个持久化的 store:
import { persistStore } from 'redux-persist'; import rootReducer from './reducers'; // 设定 store const persistor = persistStore(store); export { store, persistor };
这样,我们的 store 中的状态就会被 Redux 持久化插件自动保存到本地存储中。
配置选项
在上一节的代码中,我们使用了 persistConfig 来设定配置。这里我们详细解释一下 persistConfig 各个选项的含义。
key
key 用于指定 Redux store 保存到本地存储中的键名,默认的键名是 persist:root。
const persistConfig = { key: 'root', // 指定键名为 "root" // Other config options };
storage
storage 用于指定持久化存储使用的存储介质,默认使用 localStorage。
import sessionStorage from 'redux-persist/lib/storage/session'; const persistConfig = { key: 'root', storage: sessionStorage, // 使用 sessionStorage 存储 // Other config options };
whitelist
whitelist 用于指定哪些 reducer 中的 state 需要被持久化。如果我们只需要持久化某一个 reducer 中的 state,我们可以使用 whitelist 将其指定。
const persistConfig = { key: 'root', storage, whitelist: ['reducer1'], // 需要持久化 reducer1 中的 state };
blacklist
blacklist 用于指定哪些 reducer 中的 state 不需要被持久化。
const persistConfig = { key: 'root', storage, blacklist: ['reducer2'], // 不需要持久化 reducer2 中的 state };
transforms
transforms 用于设置将存储的值 transform 后再存储。其中 transforms 是一个数组,每个元素都是一个 transform 对象,其中有一个可选的 transform 函数。
-- -------------------- ---- ------- ------ - --------------- - ---- ---------------- ------ - --------- - ---- --------- ----- ------------- - ---------------- -- - ----- --- ---- ----- ------- -- -- --------- ----- --------------------- --- ------- -- -- --------- ----- ------------------------ --- -- ----- ------------- - - ---- ------- -------- ----------- ---------------- --
示例代码
下面是一个简单的购物车示例,使用 Redux 持久化插件保存购物车数据。
在这个示例中,购物车中的商品条目使用 id 做键值。
-- -------------------- ---- ------- ------ - --------------- ------------ - ---- ---------------- ------ ------- ---- ---------------------------- -- ------- ----- ----------- - -------------- ----- ---------------- - ------------------- ----- --------- - --------- -- -- ----- ------------ -------- --- ----- -------------- - ----------- --------- -- -- ----- ----------------- ---------- --------- --- -- -------- ----- ------------ - - ------ --- -- ----- ----------- - ------ - ------------- ------- -- - ------ ------------- - ---- ------------ ----- - --- ----- ----- - - --------------- ----- ---- - ---------------- ------ - --------- ------ - --------------- ----- - --- ----- ------ --------- ---- - ------------- - - - -- -- -- -- ---- ----------------- ----- - ---------- -------- - - ------- ----- ------- - - -------------------------- --------- ------------------------------- - --------- -- -- ----------------- - -- - ------ - --------- ------ - --------------- ------------ -------- -- -- - ---- - ----- - ------------ -- -------- - - ------------ ------ - --------- ------ -- - -------- ------ ------ - -- ----- ------------- - - ---- ------- -------- -- ----- ---------------- - ----------------------------- ------------- ----- ----- - ------------------------------ ----- --------- - -------------------- ------ - ------ ---------- ---------- -------------- --
在我们的应用中,我们可以使用 addToCart 和 removeFromCart 方法来向购物车中添加或删除商品:
import { addToCart, removeFromCart } from './cart'; store.dispatch(addToCart({ id: 1, name: 'Macbook Pro', price: 1299 })); store.dispatch(addToCart({ id: 2, name: 'iPhone 13', price: 799 })); store.dispatch(removeFromCart(1, 1));
我们使用 Redux 持久化插件将购物车状态保存到本地,即使我们关闭或刷新页面,购物车的状态也会被还原。这样我们就可以更好地保存访问者在购物车中选择的商品。
结论
在这篇文章中,我们介绍了 Redux 持久化插件的用法。我们了解了如何将 store 中的状态保存到本地,以及一些配置选项的用法。
Redux 持久化插件有很多的应用场景,例如保存用户的登录状态、浏览器历史记录等。掌握 Redux 持久化插件的用法,可以让我们更好地管理应用的状态。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6735fb260bc820c582518c17