gpt4 book ai didi

javascript - 使用 withRouter() 重定向时显示所有组件

转载 作者:行者123 更新时间:2023-12-03 02:01:07 27 4
gpt4 key购买 nike

我是 Reactjs 新手,我了解路由。这里我用了withRouter()以编程方式重定向。

我认为这个流程应该是:constructor->Willmount->render,但目前流程是constructor->render->willMount->render .

当我执行此代码时,会显示 /login 处的第一个组件,然后显示 Header 组件(登录组件及其后的 header )

class Main extends Component {

constructor(props) {
super(props);
this.state = { userInfo: ''};
}


async componentDidMount() {

let user = await apiGateway.getUserInfo();
console.log(' did Mount1');
if(user == null){
console.log('Redirect');
this.props.history.push('/login');
}else{
console.log('data');
this.setState({ userInfo : user.data });
}

}

render() {
const { authenticate, userInfo, onlineUser } = this.state;
console.log('main component');
return (
<div className='Main'>
<div className='Main-header'>
<Header userInfo = {userInfo}/>
</div>
</div>
);
}

}

export default withRouter(Main);

最佳答案

componentWillMount 中进行 api 调用是不好的做法。您不能指望 API 调用能够及时接收组件渲染的结果。始终在 componentDidMount 中进行 api 调用。

类主扩展组件{

    constructor(props) {
super(props);
this.state = { userInfo: ''};
}


async componentDidMount() {

let user = await apiGateway.getUserInfo();
console.log(' did Mount1');
if(user == null){
console.log('Redirect');
this.props.history.push('/login');
}else{
console.log('data');
this.setState({ userInfo : user.data });
}

}

render() {
const { authenticate, userInfo, onlineUser } = this.state;
console.log('main component');
return (
<div className='Main'>
<div className='Main-header'>
<Header userInfo = {userInfo}/>
</div>
</div>
);
}

}

关于javascript - 使用 withRouter() 重定向时显示所有组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50023590/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com