我是一个庞大的系统工程工作的主要路线之前,我有一个授权系统,其中已登录用户可以访问某些航线而未找到组件,在服务已注销用户。问题是,当用户被标记为登录,并具有有效的标记,然后进行到页面(例如/帐户),组分未找到呈现第一和第二以后的部件帐户呈现正确。阵营路由器*找不到*第一渲染
我有一个异步componentDidMount哪里验证我的令牌,如果它是有效的,我设置isLogged的状态:真正。同样在我的交换机中的每条路由上,我正在检查isLogged的状态,然后才发送相应的组件。
我的异步componentDidMount
{/* Username is from localstorage */}
async componentDidMount() {
if ((USERNAME != "") && (USERNAME != null)) {
const logged = await checkTheToken({'Username': USERNAME}).then((result) => {
if(result.status == 202) {
this.setState({isLogged: true});
this.setState({checking: false});
};
});
}
}
这是路由器(*假设我们正在试图访问/用户页面。请注意,我用的反应路由器,反应路由器-DOM^4.1 0.1 *)
if (this.state.checking) {
return null;
} else {
return (
<Router>
<Switch>
{/* This is Not Rendered First and Not Found rendered before FALSLY */}
{this.state.isLogged && <Route exact path="/user" component={() => (<User isLogged={this.state.isLogged} username={USERNAME} />)} />}
{/* This is Rendered First and Not Found is not rendering at all CORRECTLY */}
<Route exact path="/test" component={() => (<Test isLogged={this.state.isLogged} />)} />
<Route component={() => (<NotFound isLogged={this.state.isLogged} />)} />
</Switch>
</Router>
);
我认为这个问题是在{this.state.isLogged & & ...},因为如果我们尝试访问/test组件正确呈现没有未找到先渲染。
另外,我测试了所有的生命周期方法
您是否尝试过在'componentWillMount'中进行身份验证检查,您的组件在它进入'componentDidMount'之前已经进行了渲染。 – Purgatory
我测试了所有的生命周期方法 –
您可能需要添加一个状态字段,比如'checking“,默认为'true'。当你得到一个响应时,成功或错误会将'checking'设置为'false'。在你的render中if(this.state.checking)返回null;'。 – Purgatory