reactjs - 登录时正确渲染组件
问题描述
我正在使用React,并且我制作了一个导航栏,当您登录时它应该会更改内容。
例如,您拥有home register login
并且一旦您登录,您就拥有home logout
.
问题是在您成功登录后重定向后导航栏第一次没有改变,我不明白为什么。
登录页面:
export default class Login extends React.Component {
render() {
if (localStorage.getItem("jwt-token")) {
return (
<Redirect to = "/home" />
);
}
return (
<div id="main">
<NavBar />
<div id="body">
Login
<LoginForm />
</div>
<Footer />
</div>
);
}
}
这是在 LogginForm
render() {
if (this.state.isLogged === true) {
return (
<Redirect to = {{ pathname: "/home" }} />
);
}
... //rest of the form when you're not logged in.
}
和主页:
export default class Home extends React.Component {
render() {
return (
<div id="main">
<NavBar />
<div id="body">
Home
</div>
<Footer />
</div>
);
}
}
这是我的导航栏组件:
export default class NavBar extends React.Component {
constructor(props) {
super(props);
this.state = {
isLogged: undefined,
login: "",
}
}
async componentWillMount() {
let token = localStorage.getItem("jwt-token");
console.log(token);
if (token) {
let decodedToken = jwt.decode(token, "secretKey");
this.setState({
isLogged: true,
login: decodedToken.userInfo.login,
});
}
}
render() {
if (this.state.isLogged === true) {
return (
<div>
<ul>
<li><Link to="/home">Home</Link></li>
<li><Link to="/logout">Logout</Link> [{this.state.login}]</li>
</ul>
</div>
);
}
return (
<div>
<ul>
<li><Link to="/home">Home</Link></li>
<li><Link to="/register">Register</Link></li>
<li><Link to="/login">Login</Link></li>
</ul>
</div>
);
}
}
P/s: 很简单,我只是想了解它是如何工作的。
因此,正如我第一次重定向到主页时所说,我的导航栏就像我没有经过身份验证但我是。当我刷新页面时,我的导航栏最终看起来就像我通过了身份验证一样。
我的问题是:为什么我需要重新加载页面?
感谢帮助。
解决方案
对于那些想知道解决方案的人,它只是在组件 LoginForm 中,我在 setState 之后设置了我的令牌,然后在注册令牌之前进行了渲染。
我只是颠倒了两条线,它工作得很好!
推荐阅读
- r - 更改迷你图 R 包中项目符号图的最小值
- codeeffects - Flexsource 属性未出现在规则编辑器中
- python - 可以将 yaxis 动态添加到 plotly 中的 graph_objects 布局中吗?
- python - 如何使用 SQL Alchemy 更改我的方法以计算添加的列
- jenkins - 使用与构建相同的分支中的 Jenkins 模板引擎
- c++ - 我可以使用 nm 查看目标文件中函数的输入吗?
- css - 在 DIV 中选择框对齐
- kubernetes - 无法在单个 pod 中创建多个容器
- python - QTableWidget,背景颜色和填充不兼容
- amazon-web-services - 提取 CloudWatch 统计信息的最佳方式