reactjs - 使用 BrowserRouter Lazy 和 Suspense 延迟加载页面
问题描述
延迟加载路由是有意义的,因为它们通常是许多组件树的根。我希望能够在加载下一条路线时显示当前路线。用户希望在页面加载时稍等片刻。
我得到的错误是Error: A React component suspended while rendering, but no fallback UI was specified. Add a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.
我使用的代码是...
import React, { lazy, Suspense } from 'react';
import {BrowserRouter, Switch, Route} from 'react-router-dom';
const Home = lazy(() => import('./home'));
const Props = lazy(() => import('./props'));
const State = lazy(() => import('./state'));
const Router: React.FC = () => {
return (
<BrowserRouter>
<Switch>
<Route exact path = '/' component = {Home} />
<Route exact path = '/state' component = {State} />
<Route exact path = '/props' component = {Props} />
<Suspense fallback={Home}>
<Route component = {Home}/>
</Suspense>
</Switch>
</BrowserRouter>
);
}
export default Router;
解决方案
只是Suspense
环绕Switch
。
import ReactDOM from "react-dom";
import React, { lazy, Suspense } from "react";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
const Home = lazy(() => import("./home"));
const About = lazy(() => import("./about"));
function App() {
return (
<Router>
<Suspense fallback={<div>Loading..</div>}>
<Switch>
<Route exact path="/" component={Home} />
<Route exact path="/about" component={About} />
<Route component={Home} />
</Switch>
</Suspense>
</Router>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
希望有帮助!!!
推荐阅读
- sql - 在 SQL Server 中连接两个表后设置列值
- html - 未应用 Http/2 预加载的 css 并被视为未使用
- html - JQuery 可排序和可调整大小的 3 列。使 div 变大会影响下面的整行
- java - 使用 Selenium 在方法中更改按条件查找
- android - 如何在活动之间传递参数?
- flutter - Flutter:如何在 dart 的后台线程上运行函数
- javascript - 如何使用 React 将一组数据正确映射到表上
- java - 如何从android的firebase数据库中的uid获取/检索多个数据?
- optimization - IBM 的 CPLEX cplex.setOut(env.getNullStream()) 无法正常工作
- audio - 分割语音和清音?