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

webpack + react + react-router实现懒加载的示例

发布时间:2023-05-18 22:17:37

在前端开发中,应用的体积日益增大,特别是当我们使用诸如 React 和 React Router 等框架时,应用程序的规模越来越大,代码分割可以有效地减少应用程序的体积,加快应用程序的加载速度,从而提高用户体验。本文将介绍如何使用webpack,React和React Router来实现懒加载的示例,具体如下:

1. 安装所需的依赖项

安装webpack,babel的相关依赖,以及react和react-router等相关依赖。可以使用如下命令:

npm install webpack webpack-cli babel-loader @babel/preset-env @babel/preset-react react react-dom react-router-dom -D

2. 配置webpack.config.js文件

在项目根目录下创建一个 webpack.config.js 文件,并进行如下配置:

const path = require("path");

module.exports = {
  mode: "development",
  entry: "./src/index.js",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, "dist"),
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader",
          options: {
            presets: ["@babel/preset-env", "@babel/preset-react"],
          },
        },
      },
    ],
  },
};

其中:

mode: "development": webpack的模式,设置为开发模式。

entry: "./src/index.js": 入口文件路径。

output: {}: webpack输出相关的配置,包括输出的文件名和目录等信息。

module: {}:配置webpack的模块解析。

rules: []:webpack中的规则配置。这里的规则是使用babel-loader打包所有.js文件。

3. 创建路由相关组件

我们需要用到react-router-dom库来实现懒加载。根据需要创建路由相关的组件,此处为了展示一张精美的图片,我们创建一个名为Image的组件,并在其中添加一张图片:

import React from "react";
import cat from "../images/cat.jpg";

const Image = () => {
  return <img src={cat} alt="cat" />;
};

export default Image;

其中,我们利用ES6的import语法引入图片,图片文件路径为 "../images/cat.jpg",此处图片文件应该放在项目中的"src/images"目录下。

4. 配置路由懒加载

为了实现路由的懒加载,我们需要使用React.lazy和Suspense组件。React.lazy方法接受一个返回动态import的函数。这个函数返回一个Promise,该Promise解析为一个默认的导出的React组件。我们可以将路由文件导出为一个动态import函数,然后使用React.lazy进行包装:

import React, { lazy, Suspense } from "react";
import { BrowserRouter as Router, Route } from "react-router-dom";
// 导入 Image 组件
const Image = lazy(() => import("./components/Image"));

function App() {
  return (
    <Router>
      <Suspense fallback={<div>Loading...</div>}>
        <Route exact path="/" component={Home} />
        <Route exact path="/image" component={Image} />
      </Suspense>
    </Router>
  );
}

export default App;

其中,我们利用React.lazy将Image组件进行包装。通过使用fallback属性来定义一个加载时动态显示的组件,这里我们将它定义为"Loading..."。当我们访问应用程序的“/image”路由时,Image组件将被懒惰地加载。

5. 运行代码

现在,我们可以运行webpack-dev-server,使用以下命令启动应用程序:

npx webpack-dev-server --open

然后打开浏览器,访问 http://localhost:8080/ ,你可以看到一个包含“点击此处加载图片”按钮的主页。当你点击该链接时,我们的React程序将路由到“/image”路径,并加载Image组件。

总之,本文介绍了如何使用webpack,React和React Router来实现懒加载的示例。懒加载可以有效地减少应用程序的体积,加快应用程序的加载速度,从而提高用户体验。