Tar*_*are 5 javascript reactjs react-router react-hooks
我的项目中有一个导航栏,我从内部调用它App.js。根据我是否登录,我想呈现不同的视图NavBar。如果登录,我希望NavBar有一个注销按钮。如果注销,我希望NavBar有登录按钮。我使用令牌来localStorage检查我是否登录。登录后,令牌存在于localStorage. 注销/登录前,.txt 文件中没有令牌密钥localStorage。我将此令牌作为状态传递给NavBar如下所示:
export default function App() {
const [loggedIn, setLoggedIn] = useState(localStorage.getItem("token"));
return (
<div>
<Router>
<Navbar isAuth={loggedIn} />
<Route exact path="/" exact component={Home} />
<Route path="/login" component={Login} />
<PrivateRoute path="/dashboard" component={Dashboard} />
</Router>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
现在,从NavBar组件中,我使用此道具来渲染不同的视图,NavBar如下所示:
const NavBar = props => {
const classes = useStyles();
if (props.isAuth !== null) {
return (
<div className={classes.root}>
<AppBar position="static">
<Toolbar>
<Typography variant="h6" className={classes.title}>
<Link
href="/"
style={{ textDecoration: "none", color: "white" }}
>
Timetracker
</Link>
</Typography>
<Link href="/" style={{ color: "white" }}>
<Button color="inherit" onClick={auth.logout}>
Logout
</Button>
</Link>
</Toolbar>
</AppBar>
</div>
);
} else {
return (
<div className={classes.root}>
<AppBar position="static">
<Toolbar>
<Typography variant="h6" className={classes.title}>
<Link
href="/"
style={{ textDecoration: "none", color: "white" }}
>
Timetracker
</Link>
</Typography>
<Link href="/login" style={{ color: "white" }}>
<Button color="inherit">Login</Button>
</Link>
</Toolbar>
</AppBar>
</div>
);
}
};
export default NavBar;
Run Code Online (Sandbox Code Playgroud)
问题是,NavBar我登录后不会立即更新。我必须手动刷新页面才能呈现新的NavBar. 同样,在注销时,它不会自行更新,仅在手动刷新时更新。这是什么问题以及如何解决这个问题?
<Switch>您也需要添加。从文档中:
渲染第一个子项或与位置匹配的子项。
<Switch>其独特之处在于它专门渲染一条路线。相反,每个<Route>与位置匹配的内容都包含在内地渲染。
就像下面这样:
<Router>
<Switch>
<Navbar isAuth={loggedIn} />
<Route exact path="/" exact component={Home} />
<Route path="/login" component={Login} />
<PrivateRoute path="/dashboard" component={Dashboard} />
</Switch>
</Router>
Run Code Online (Sandbox Code Playgroud)
在这里进一步阅读:路由器
我希望这有帮助!
| 归档时间: |
|
| 查看次数: |
13571 次 |
| 最近记录: |