1

我正在尝试重构一些旧代码。

componentWillMount已被弃用。

我如何将它在这里重构为其他东西?

class Detail extends React.Component{

constructor(props) {
    super(props);

    this.state = {
        logged_out_redirect: true
    };
}   

componentWillMount() {  //<------ this lifecycle method has been deprecated, how do I replace it?

    if (localStorage.getItem("JWT")) {
        this.setState({logged_out_redirect: false});
    }
}

render() {

    if (this.state.logged_out_redirect) {
        return (<Redirect to={"/login"}/>)
    }

    return (        )

}

}
4

3 回答 3

3

在这种情况下(取决于你想要做什么componentWillMount)。你不能把它放在你的constructor()

constructor(props) {
  super(props);

  this.state = {
    logged_out_redirect: localStorage.getItem("JWT") ? false : true
  };
}
于 2019-04-06T04:30:49.850 回答
1

您可以尝试使用getDerivedStateFromProps. 这将在第一次和任何后续更新中调用。

static getDerivedStateFromProps(props, state) {
    if (localStorage.getItem("JWT") && state.logged_out_redirect) {
        return {logged_out_redirect: false};
    }
    return null;
}
于 2019-04-06T06:30:48.193 回答
0

您可以将其替换为componenDidMount

componentDidMount() {   
    if (localStorage.getItem("JWT")) {
        this.setState({logged_out_redirect: false});
    }
}
于 2019-04-06T04:18:14.713 回答