我想将延迟装载应用到特定的路由.我想要这样的东西:

import { lazy, Suspense } from "react";
import { Route, Routes } from "react-router-dom";
import NotLazyComponent from "./NotLazyComponent";

const LazyOne = lazy(() => import("./LazyOne"));
const LazyTwo = lazy(() => import("./LazyTwo"));

const App = () => {
  return (
    <Routes>
      <Route path="/not-lazy" element={<NotLazyComponent />} />
      <Suspense fallback={<div>Loading...</div>}>
        <Route path="/lazy-one" element={<LazyOne />} />
        <Route path="/lazy-two" element={<LazyTwo />} />
      </Suspense>
    </Routes>
  );
};

export default App;

但这是行不通的.这样做的正确方式是什么?

推荐答案

只有RouteReact.Fragment组件是Routes组件的有效子项.Suspense需要在其他地方渲染.

您可以将单独的路由包装在Suspense组件中:

const App = () => {
  return (
    <Routes>
      <Route path="/not-lazy" element={<NotLazyComponent />} />
      <Route
        path="/lazy-one"
        element={(
          <Suspense fallback={<div>Loading...</div>}>
            <LazyOne />
          </Suspense>
        )}
      />
      <Route
        path="/lazy-two"
        element={(
          <Suspense fallback={<div>Loading...</div>}>
            <LazyTwo />
          </Suspense>
        )}
      />
    </Routes>
  );
};

创建包裹延迟加载的嵌套管线元件的布局管线:

import { Routes, Route, Outlet } from 'react-router-dom';

const SuspenseLayout = () => (
  <Suspense fallback={<div>Loading...</div>}>
    <Outlet />
  </Suspense>
);

const App = () => {
  return (
    <Routes>
      <Route path="/not-lazy" element={<NotLazyComponent />} />
      <Route element={<SuspenseLayout />}>
        <Route path="/lazy-one" element={<LazyOne />} />
        <Route path="/lazy-two" element={<LazyTwo />} />
      </Route>
    </Routes>
  );
};

或者在react 树中将Suspense组件提升到Routes组件之外的更高位置:

const App = () => {
  return (
    <Suspense fallback={<div>Loading...</div>}>
      <Routes>
        <Route path="/not-lazy" element={<NotLazyComponent />} />
        <Route path="/lazy-one" element={<LazyOne />} />
        <Route path="/lazy-two" element={<LazyTwo />} />
      </Routes>
    </Suspense>
  );
};

Javascript相关问答推荐

在分区内迭代分区

对象和数字减法会抵消浏览器js中的数字

微软Edge编辑和重新发送未显示""

google docs boldText直到按行执行应用脚本错误

在服务器上放置了Create Reaction App Build之后的空白页面

更改JSON中使用AJAX返回的图像的路径

Regex结果包含额外的match/group,只带一个返回

如何在ASP.NET JavaScript中使用Google Charts API仅对绘制为负方向的条形图移动堆叠条形图标签位置

如何迭代叔父元素的子HTML元素

提交链接到AJAX数据结果的表单

从Nextjs中的 Select 项收集值,但当单击以处理时,未发生任何情况

触发异步函数后不能显示数据

自定义图表工具提示以仅显示Y值

更新Redux存储中的对象数组

使每个<;li>;元素的 colored颜色 与随机生成的 colored颜色 列表不同(不重复

如何将对象推送到firestore数组?

当达到高度限制时,如何裁剪图像?使用html和css

在此div中添加一个类,并在一段时间后在Java脚本中将其删除

由于http.get,*ngIf的延迟很大

如何为两条动态路由创建一个页面?