在React中删除后,为什么仍要从本地存储中获取数据?

时间:2018-10-01 09:57:49

标签: javascript reactjs asynchronous redux local-storage

我这样定义我的本地存储:

export default new class LocalStorage {
  setItem(key, data) {
    window.localStorage.setItem(key, JSON.stringify(data));
  }

  getItem(key) {
    return JSON.parse(window.localStorage.getItem(key));
  }

  removeItem(key) {
    window.localStorage.removeItem(key);
  }
}();

和我的RestrictionRoute是这样的:

const localStorageData = LocalStorage.getItem("root");    
export const RestrictionRoute = ({ component: Component, ...rest }) => {
      console.log(localStorageData);
      return (
        <Route
          {...rest}
          render={props =>
            localStorageData && localStorageData.token ? (
              <Redirect to="/" />
            ) : (
              <Component {...props} />
            )
          }
        />
      );
    };

我的注销操作:

export function logOut() {
  return function(dispatch) {
    dispatch(changeLoadingStatusTo(true));
    LocalStorage.removeItem("root");
    dispatch(changeLoadingStatusTo(false));
    dispatch(push("/login"));
  };
}

当我单击标题中的注销时,将触发注销操作,数据也将在本地存储中删除,并且在RestrictionRoute中,我通过console.log(localStorageData)再次检查localstorage,然后数据仍然存在。这让我感到困惑。

1 个答案:

答案 0 :(得分:0)

尝试直接检查“ LocalStorage.getItem(“ root”),而不要打印存储在变量中的值,因为localStorage是初始化类时存在的数据的副本。