javascript - 如何使用 React Router 在页面视图之间呈现通用加载屏幕?
问题描述
我目前基本上有这个:
import React, { useState, useEffect } from 'react'
import {
BrowserRouter as Router,
Switch,
Route,
} from 'react-router-dom'
const Component = () => {
const [isLoading, setIsLoading] = useState(true)
const [isWaiting, setIsWaiting] = useState(true)
useEffect(() => {
const timer = setTimeout(() => setIsWaiting(false), 1000)
return () => clearTimeout(timer)
}, [])
useEffect(() => {
loadFonts.then(() => setIsLoading(false))
})
if (isLoading || isWaiting) return 'Loading...'
return (
<Router>
<Switch>
<Route path='/one'>
<One />
</Route>
<Route path='/two'>
<Two />
</Route>
</Switch>
</Router>
)
}
基本上我想要做的是,在hard-browser-page-refresh 上,显示一个加载器至少 1秒(所以它是一致的,稍后我会做一个淡入淡出过渡)作为我需要的字体加载,这可能需要 5 秒以上。加载完所有内容后,显示屏幕。
不过,我希望它做的只是在硬刷新时仅显示此加载页面一次。当用户单击<Link to='/one'>One</Link>
某种链接时,我希望它不会导致这个顶级“应用程序”组件的完全重新渲染,其中包含所有路由和定义的路由器。但是,它所做的是重新渲染上面的整个组件,并导致计时器执行路由器的每次点击<Link to...>
......我不明白为什么这不像你期望的那样工作。您希望对<Link to='/one'>One</Link>
新 URL 进行非硬页面更改,从路由加载内容,但不进行完整的组件重建并导致加载器再次显示。
我究竟做错了什么?如何让它在每次使用<Link to...>
from切换页面时不显示加载器react-router
?
解决方案
推荐阅读
- openapi - 有没有办法控制由 openapi 生成器的 html2 输出创建的使用和 SDK 示例(如果有)
- css - 覆盖浏览器强制自动填充背景颜色 - 跨浏览器?
- reporting-services - 如何制作静态表格
- ruby-on-rails - VueJS 与多页 Rails 6 应用程序与 Turbolinks - 布局
- java - Android Studio:SQLite 某种形式的测验。在 logcat 中出现错误
- python - Discord 机器人 Python API guild.members
- android - Android Studio Emulator 被杀
- javascript - 如何使用节点刷新 JWT 令牌并做出反应
- kubernetes - Kubernetes 中的示例容器化应用程序无法在 Prometheus 中显示为用于抓取指标的目标
- excel - Excel VBA更新范围内的单元格