const变量必须在不重新加载窗口的情况下才能更新

时间:2019-04-01 17:47:46

标签: javascript reactjs react-router-dom

我正在尝试将登录页面重定向到我的主页。 我使用以下方法做到这一点:

this.props.history.push("/userdashboard");

这有效,但是在主页上有从Constants.js提取的const变量,其中包含USER_ID,这些变量是从本地存储中设置的:

let user_id = null;
try {
  user_id =
    window.localStorage.getItem("user_info") &&
    JSON.parse(window.localStorage.getItem("user_info")).user_id;
} catch (err) {
  console.error("Error Parsing user_info user_id");
}
const USER_ID = user_id;

export { USER_ID };

,然后用

导入
import { USER_ID} from "../constants/Constants";

问题在于,这些常量仍然为null,并且在重新加载页面之前不包含新信息。

我希望不使用location.reload就可以做到这一点,因为我希望有时将用户推送到特定页面。

这来自我的登录页面,该页面等待操作完成然后按下

this.props.loginFunc(login_data).then(() => this.completeLogin());

completeLogin() {
  this.props.history.push("/userdashboard");
}

我无法找出刷新此const数据的方法。而且我也不完全确定为什么每次使用这些常量都会从本地存储中获取项目,这是意料之外的,并且在足够的地方使用这些常量将很难进行重构。

2 个答案:

答案 0 :(得分:0)

常量的全部要点是不能重新分配它们。因此,每次导入Constants.js时,它将始终使用以前的const值。

您已经有了一个let user_id变量,只需将其导出

let user_id = null
try {
  user_id = window.localStorage.getItem("user_info") && JSON.parse(window.localStorage.getItem("user_info")).user_id
}
catch(err) {
  console.error("Error Parsing user_info user_id")
}

export {
  USER_ID: user_id,
}

答案 1 :(得分:0)

我不确定constlet(我猜是var)与user_id = window.localStorage.getItem("user_info") && JSON.parse(window.localStorage.getItem("user_info")).user_id; 会有所不同。读取一次localStorage重要的是。 什么时候应该在一次阅读后更新?我看不到这段代码。

放入此行

<input>

如果希望在运行时进行更新,则脚本应在其中检查更新。