#reactjs #react-lifecycle
#reactjs #реагировать-жизненный цикл
Вопрос:
Я пытаюсь провести рефакторинг некоторого старого кода.
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 ( )
}
}
Ответ №1:
В этом случае (зависит от case, что вы пытаетесь сделать в componentWillMount
). Вы не можете поместить его в свой constructor()
constructor(props) {
super(props);
this.state = {
logged_out_redirect: localStorage.getItem("JWT") ? false : true
};
}
Ответ №2:
Вы можете попробовать использовать getDerivedStateFromProps
. Это будет вызвано в первый раз и для любого последующего обновления.
static getDerivedStateFromProps(props, state) {
if (localStorage.getItem("JWT") amp;amp; state.logged_out_redirect) {
return {logged_out_redirect: false};
}
return null;
}
Ответ №3:
Вы можете заменить его на componenDidMount
:
componentDidMount() {
if (localStorage.getItem("JWT")) {
this.setState({logged_out_redirect: false});
}
}
Комментарии:
1. Спасибо за предложение помочь. Я уже пробовал это. Вот почему это не работает. Метод визуализации содержит
if (this.state.logged_out_redirect) { return (<Redirect to={"/login"}/>) }
. К моменту монтирования он уже перенаправлен на другой компонент. ТакcomponentDidMount
либо не срабатывает, либо срабатывает слишком поздно.