首页 > 解决方案 > 部署客户端后如何更新持久化的 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方法是没有用的,最好在将项目部署到客户端后有办法控制一次运行。

标签: javascriptreactjsredux

解决方案


添加versionlocalStorage比较何时从减速器初始化您的状态

在加载状态之前保存版本号

// 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.
  }
};

推荐阅读