正如官方文档所说,componentWillMount已被弃用,建议放在
将此生命周期方法使用的任何代码都应传入构造函数。

老实说,我不知道该怎么做。我有用于componentWillMount的这段代码
但是我应该如何将其实现到构造函数中:

if (window.localStorage.getItem("authToken"))
  this.setState({ isAuthenticated: true });


我有这样的:

constructor() {
  super();
  this.state = {
    users: [],
    username: "",
    email: "",
    title: "something",
    isAuthenticated: false
  };
  if (window.localStorage.getItem("authToken"))
    this.setState({ isAuthenticated: true });
}


但该条件在应触发时并未触发。条件语句应如何在构造函数中工作?

任何指导表示赞赏。

编辑:

constructor() {
  super();
  this.state = {
    users: [],
    username: "",
    email: "",
    title: "something",
    isAuthenticated: window.localStorage.getItem("authToken") ? true : false
  };
}


我会尝试的,因为这对我来说确实有意义。

最佳答案

您不能期望componentWillMount的确切流程,而是需要以稍微不同的方式进行思考。

你可以这样做。


componentDidMount() {
  if (window.localStorage.getItem("authToken"))
    this.setState({ isAuthenticated: true });
}


render() {
  // Since this function will be called before
  // componentDidMount, handle the false case here

  if (!this.state.isAuthenticated) {
    return null; // or any fallback UI for unAuthenticated user
  }

  return (
   // the original UI
  )
}


关于javascript - 不推荐使用componentWillMount,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60388563/

10-09 18:36