【发布时间】:2019-10-16 09:33:04
【问题描述】:
我为反应应用程序构建了一个条件导航栏。登录后,如果有 JWT 令牌,它应该立即显示 Chat navlink 和 Logout navlink。但是,它仅在刷新时显示它们。为什么会这样,我该如何解决?
我使用 JWT 对象作为授权。
Navbar.js
import React, {Component} from 'react';
import {Navbar, Nav} from 'react-bootstrap';
import {Link} from 'react-router-dom';
import Logo from '../../logo/blacklogo.png';
import Logout from '../logoutNavLink/logout';
import getJwt from '../../utils/getJwt';
import '../navbar/style.css'
const jwt = getJwt();
class Navigation extends Component {
state = {
isAuthenticated: jwt
}
render() {
return (
<Navbar bg="light" expand="sm">
<Navbar.Brand href="/">
<img
src={Logo}
className="d-inline-block align-top"
alt="Soundbudz logo"
/>
</Navbar.Brand>
<Navbar.Toggle aria-controls="basic-navbar-nav" />
<Navbar.Collapse id="basic-navbar-nav">
{this.state.isAuthenticated ? (
<Nav className="ml-auto">
<Link to="/chat">Chat</Link>
<Logout to="/">Logout</Logout>
</Nav>
):(
<Nav className="ml-auto">
<Link to="/registration">Registration</Link>
<Link to="/login">Login</Link>
</Nav>
)}
</Navbar.Collapse>
</Navbar>
)}
}
export default Navigation;
【问题讨论】:
-
因为
jwt没有更新组件中的状态。您应该在组件内调用jwt更新函数或将 jwt 作为<Navigation />组件的道具发送。
标签: reactjs jwt react-bootstrap