这个 componentWillMount 案例的替代方案?
alternative for this componentWillMount case?
我正在尝试重构一些旧代码。
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 ( )
}
}
可以替换为componenDidMount
:
componentDidMount() {
if (localStorage.getItem("JWT")) {
this.setState({logged_out_redirect: false});
}
}
在这种情况下(取决于您在 componentWillMount
中尝试执行的操作)。你不能把它放在你的 constructor()
里面
constructor(props) {
super(props);
this.state = {
logged_out_redirect: localStorage.getItem("JWT") ? false : true
};
}
您可以尝试使用getDerivedStateFromProps
。这将在第一次和任何后续更新时被调用。
static getDerivedStateFromProps(props, state) {
if (localStorage.getItem("JWT") && state.logged_out_redirect) {
return {logged_out_redirect: false};
}
return null;
}
我正在尝试重构一些旧代码。
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 ( )
}
}
可以替换为componenDidMount
:
componentDidMount() {
if (localStorage.getItem("JWT")) {
this.setState({logged_out_redirect: false});
}
}
在这种情况下(取决于您在 componentWillMount
中尝试执行的操作)。你不能把它放在你的 constructor()
constructor(props) {
super(props);
this.state = {
logged_out_redirect: localStorage.getItem("JWT") ? false : true
};
}
您可以尝试使用getDerivedStateFromProps
。这将在第一次和任何后续更新时被调用。
static getDerivedStateFromProps(props, state) {
if (localStorage.getItem("JWT") && state.logged_out_redirect) {
return {logged_out_redirect: false};
}
return null;
}