问题描述
我正在尝试从React 16.12.0使用Suspense进行延迟加载。我也在使用React Router 5.1.2。
这是我第一次使用Suspense,而且我没有设法找到一种正确的方式来加载404 / NoMatch而不会引起其他问题。
我的代码如下:
import Component1 from 'path'
import Component2 from 'path'
import NoMatchPage from 'path
const Component3 = lazy(()=>import('path'));
const Component4 = lazy(()=>import('path'));
<Router>
<Switch>
<Route exact path="/route-1" component={Component1}/>
<Route exact path="/route-2" component={Component2}/>
<Suspense fallback={<Loader/>}>
<Route exact path="/route-3" component={Component3}/>
<Route exact path="/route-4" component={Component4}/>
</Suspense>
<Route component={NoMatchPage}/>
<Switch>
</Router>
这样编写,就永远不会显示“ NoMatchPage”组件。
作为最后一个子项写在Suspense中,它将在任何路径上呈现“ NoMatchPage”组件,该组件放置在应在该路径上呈现的组件之后。
写在Suspense上方,将在任何路径上呈现“ NoMatchPage”组件,该组件将放置在应在该路径上呈现的组件之前。
我检查了官方文档和许多实际示例,但没有发现任何可以解决此问题的东西。
解决方法
也许你已经想通了,但是试着像这样将悬念嵌套在路线中,并为你想要在其上设置悬念后备的每条路线都这样做:
<Route exact path="/route-3"/>
<Suspense fallback={<Loader />}>
<Component3/>
</Suspense>
</Route>
,
从我读到的 the official documentation 中,有一个示例说明 Switch 组件在 Suspense 组件中工作。所以也许对于您的问题,您可以尝试将 Switch 组件移动到 Suspense 组件中(组件 Suspense 的顺序高于组件 Switch )。下面是一个例子。
<Router>
<Suspense fallback={<div>Loading...</div>}>
<Switch>
<Route exact path="/" component={Home}/>
<Route path="/about" component={About}/>
</Switch>
</Suspense>
</Router>
祝你好运!