javascript - 导航到不同路由上的页面时暂时丢失状态
问题描述
function App() {
const { user } = useContext(AuthContext);
console.log(user);
return (
<Router>
<Switch>
<Route exact path="/">
{user ? <Home /> : <Register />}
</Route>
<Route path="/login">{user ? <Redirect to="/" /> : <Login />}</Route>
<Route path="/register">
{user ? <Redirect to="/" /> : <Register />}
</Route>
<Route path="/messenger">
{!user ? <Redirect to="/" /> : <Messenger />}
</Route>
<Route path="/profile/:username">
{!user ? <Redirect to="/" /> : <Profile />}
</Route>
<Route path="*">
{user ? <Profile /> : "404 ERROR: Page does not exists"}
</Route>
</Switch>
</Router>
);
}
export default App;
在上面的APP中,<Messager />
页面中有一个小部件,它将链接到<Profile />
页面,反之亦然。在<Profile />
页面内,还有另一个小部件将链接到不同的:username
页面。
我注意到,当我单击页面内的小部件<Profile />
以在不同页面之间来回导航时:username
,状态被保留。
<Profile />
但是,当我通过单击页面内的小部件导航到<Messager />
页面时,状态最初会暂时丢失。我知道这是因为如果状态存在则检查显示一张图片,如果状态不存在则显示不同的图像。在切换到第一张图像之前,稍后的图像会暂时出现。
我能说的唯一区别是所有:username
页面都在同一个页面中<Route>
,而<Messager>
位于一个单独的<Route>
.
整个 APP 被包裹在一个useContext
.
为什么会这样?解决方案是什么?
解决方案
推荐阅读
- node.js - 在节点 js 中将响应发送到客户端后从 setTimeOut 执行代码是一种不好的做法吗?
- jenkins - 如何使用 credentials.xml 创建 jenkins ssh 密钥凭据?
- python - AttributeError:模块“tensorboard.compat.tensorflow_stub.io.gfile”没有属性“FastGFile”?
- sprite-kit - 将cocos2d的粒子plist文件转换成spritekit的sks文件
- spring-boot - 如何在 api 调用中获取 sleuth trace_id
- github - 如何在另一个存储库中使用相同的问题标签?
- c++ - 跨 DLL 边界的简单回调函数
- bash - 使用 awk 从 csv 文件返回相邻的匹配值
- python - TensorFlow从1升级到2,突然出现“没有为任何变量提供梯度”
- flutter - 在 Flutter 中创建无 GSF 的构建风格