我有一个React项目,使用React Router DOM v6来管理我所有的路由。
我有一个路由使用了一个相当重的组件,当切换到那个重组件时,在当前页面消失和新页面出现之前会有1+秒的延迟,因为呈现那个组件需要时间。
有没有一种方法可以在尝试加载组件之前更改页面,或者在加载组件时显示一个“正在加载”的页面?
demo simulating the issue
所谓“重路由”,我的意思是,它渲染缓慢,每当你改变路线。
我有一个React项目,使用React Router DOM v6来管理我所有的路由。
我有一个路由使用了一个相当重的组件,当切换到那个重组件时,在当前页面消失和新页面出现之前会有1+秒的延迟,因为呈现那个组件需要时间。
有没有一种方法可以在尝试加载组件之前更改页面,或者在加载组件时显示一个“正在加载”的页面?
demo simulating the issue
所谓“重路由”,我的意思是,它渲染缓慢,每当你改变路线。
1条答案
按热度按时间von4xj4u1#
您可以实现React.lazy()来延迟加载页面,然后使用React.Suspense()在转换时显示正在加载的页面。
这是一个非常简单的例子。它的作用是当你最初加载页面时,
MyPage
不会被加载。页面的加载将被延迟到需要它的时候。一旦你转到/mypath
,MyPage
就会被加载,并且Suspense
组件将显示加载<p>
标签。当然,这可以是你想要的任何元素,甚至是一个组件。或者,在大组件内部,可以使用
useState()
创建一个简单的布尔isLoading
和setIsLoading
状态,并在初始时将其设置为true
,然后,如果isLoading
为true
,则呈现一个正在加载的组件,操作完成后,将isLoading
设置为false
。