欢迎访问宙启技术站
智能推送

详解react-router如何实现按需加载

发布时间:2023-05-16 00:23:43

React-Router 是 React 生态中路由管理的工具,它基于 React 组件树来组织页面路由。 React-Router 支持按需加载路由,又称为懒加载。这个特性让开发者能够更快速地加载应用程序,并且节省了浏览器资源。

实现按需加载的关键是使用动态导入。使用动态导入,我们可以将代码分割成多个小块,并且只在需要的时候去加载这些小块。这样能够大大减小代码量和页面加载时间。

在 React-Router 中涉及到按需加载的核心组件是 React.lazy 和 Suspense。React.lazy是在React16.6版本中引入的,它是一个高阶组件,允许我们在组件渲染期间,将对某个模块的导入延迟到组件真正需要被渲染的时候。而Suspense则是用于在组件渲染之前等待异步模块加载完成。这两个组件的配合使得按需加载得以实现。

步骤:

1.安装React-Router和@babel/plugin-syntax-dynamic-import:

2.在babel配置文件中加入@babel/plugin-syntax-dynamic-import

  "presets": [
    "react-app"
  ],
  "plugins": [
    "@babel/plugin-transform-runtime",
    "@babel/plugin-syntax-dynamic-import"
  ]
}

3.使用React.lazy从指定路径引入需要延迟加载的组件:

这里MyComponent是需要被延迟加载进来的组件,如果组件需要从另一个文件中被加载,则需要将文件路径传递给import(),例如:

4.使用<Suspense/>来包裹延迟加载的组件:

  <Suspense fallback={<div>Loading...</div>}>
    <Switch>
      <Route exact path="/" component={Home} />
      <Route path="/about" component={About} />
      <Route path="/contact" component={Contact} />
      <Route path="/dashboard" component={Dashboard} />
    </Switch>
  </Suspense>
</Router>

5. 在导入路由页面组件时使用React.lazy导出

6. 还要使用webpack的魔法注释,来调整每个文件的名称,以便于在生成的构建资产中查找正确的分块文件。

这样的话webpack就会按需加载生成的chunk。

React-Router可以轻松实现按需加载,并且通过React.lazy和 Suspense两个API更加方便实现延迟加载,使得应用程序能够快速加载,并且节省浏览器的资源。