javascript - 部署客户端后如何更新持久化的 redux 状态?
问题描述
我使用 localStorage 作为我的持久化 redux 状态,代码如下所示。
export const loadState = () => {
try {
// localStorage.clear();
const serializedState = localStorage.getItem("state");
if (serializedState === null) {
return undefined;
}
return JSON.parse(serializedState);
} catch (err) {
return undefined;
}
};
export const saveState = state => {
try {
const serializedState = JSON.stringify(state);
localStorage.setItem("state", serializedState);
} catch (err) {
// Ignore write errors.
}
};
每次更改逻辑减速器时,我都应该运行localStorage.clear();
以更新 localStorage 以便项目可以正确运行。但是每次都运行clear方法是没有用的,最好在将项目部署到客户端后有办法控制一次运行。
解决方案
添加version
并localStorage
比较何时从减速器初始化您的状态
在加载状态之前保存版本号
// When you update your reducers increase this
// version to 0.2 => 0.3 => 0.4
// this should run before you call loadState
localStorage.setItem('version', '0.3');
export const loadState = () => {
try {
const version = localStorage.getItem('version');
// When you update your reducers change this comparison
// to the version number you set in localStorage
if (version !== '0.1') {
// Let reducers initial the state if the version is not identical
return undefined;
}
const serializedState = localStorage.getItem('state');
if (serializedState === null) {
return undefined;
}
return JSON.parse(serializedState);
} catch (err) {
return undefined;
}
};
export const saveState = (state) => {
try {
const serializedState = JSON.stringify(state);
localStorage.setItem('state', serializedState);
} catch (err) {
// Ignore write errors.
}
};
推荐阅读
- javascript - 如何在 JavaScript 中的 shopify 商店中获得上个月最畅销的产品?
- java - 带有@AllArguments 的 ByteBuddy 方法拦截器似乎不起作用
- python - 如何使用 python f 字符串替换 format()?
- google-apps-script - 仅从一张纸限制的宏的更改触发器
- azure - Ansible 字符串变量到 Terraform 列表(字符串)
- c# - 如何在 C# 中从 db 中获取数据?
- c - fgets() 读取 char 和 int 输入,但打印时会打印废话
- python - 在 Imshow 中更改值的颜色
- javascript - 'Boolean | 类型不存在属性'insertId' (部分的
& { insertId?: 数字 | 不明确的; })' - sql - 用字母和数字检查约束