使用 Webpack 搭建 React SSR 应用

阅读时长 7 分钟读完

在前端开发中,React SSR 是一种常见的技术方案,它可以在服务端渲染 React 组件,提升页面加载速度和 SEO。在本文中,我们将介绍如何使用 Webpack 搭建一个基本的 React SSR 应用。

什么是 React SSR

React SSR (Server-Side Rendering)即服务端渲染,它指的是在服务端使用 React 渲染页面,并将 HTML 字符串发送给客户端。相比于浏览器端渲染,SSR 有以下优势:

  • 更快的页面加载速度:在客户端渲染中,JavaScript 需要下载、解析和执行,才能生成页面。这个过程可能会有一定的延迟,而服务端渲染则可以直接输出 HTML 字符串,减少页面加载时间。
  • 更好的 SEO:浏览器对于 SPA(Single-Page Application)的爬行和索引做得不够好,在服务端渲染中,可以让搜索引擎更容易地爬行和索引网站内容。
  • 更好的首屏渲染:在客户端渲染中,用户会看到一个空白的页面,然后在 JavaScript 加载完毕后才会看到内容。而在服务端渲染中,用户可以立即看到页面的内容。

Webpack 的基本配置

Webpack 是前端工程化中的重要工具之一,它可以将多个 JavaScript 文件打包成一个文件,并自动处理依赖关系。在使用 Webpack 搭建 React SSR 应用之前,我们需要进行一些基本配置:

  1. 安装 Webpack 和相关插件
  1. 创建 Webpack 配置文件

在项目根目录下创建 webpack.config.js 文件,配置基本信息:

-- -------------------- ---- -------
----- ---- - ---------------

-------------- - -
  ----- --------------
  ------ ------------------------
  ------- -
    --------- ------------
    ----- ----------------------- ---------
  --
  ------- -
    ------ -
      -
        ----- --------
        -------- -----------------
        ---- -
          ------- ---------------
          -------- -
            -------- --------------------- ----------------------
          -
        -
      --
      -
        ----- ---------
        ---- ---------------- -------------
      -
    -
  -
-

其中,mode 指定环境为开发模式;entry 指定入口文件,output 指定生成的文件名和路径;module.rules 配置用于加载 JavaScript 和 CSS 文件的 loader。

React SSR

在基本配置完成之后,我们来实现 React SSR。首先,我们需要了解服务端渲染的原理。服务端渲染的工作流程如下:

  1. 服务端获取数据
  2. 服务端渲染组件,并将组件输出为 HTML 字符串
  3. 服务端将 HTML 字符串发送给客户端
  4. 客户端加载 JS 文件,挂载组件并绑定事件

因此,我们需要将组件代码分为两部分:服务端渲染部分和客户端渲染部分。服务端渲染部分需要将组件渲染为 HTML 字符串,而客户端渲染部分需要加载 JS 文件,并将组件插入到 HTML 中。

服务端渲染部分

首先,我们在服务端中安装 React 和 ReactDOM:

然后,我们创建一个 server 目录,用于存放服务端代码。在 server 目录下创建 index.js 文件,代码如下:

-- -------------------- ---- -------
----- ------- - ------------------
----- ---- - ---------------
----- ----- - ----------------
----- -------------- - ---------------------------

----- --- - --------------------------------
----- ------------ - -------------------------

----- --- - ---------

------------------------------------------- --------------

------------ ----- ---- -- -
  ----- ---- - ---------------------------------- ---
  ----------------------------
--

---------------- -- -- -
  ------------------- -- --------- -- ---- ---------
--

其中,htmlTemplate 是一个用于生成 HTML 字符串的函数,暂时先不考虑它。App 是我们的 React 组件,它需要从客户端的 index.js 中导入。renderToString 方法用于将组件渲染为 HTML 字符串,我们将其作为 HTML 的主体内容,发送给客户端。

客户端渲染部分

在客户端中,我们需要在 HTML 文件中添加以下代码,用于加载 JS 文件和挂载组件:

-- -------------------- ---- -------
--------- -----
----- ----------
------
  ----- ----------------
  ------------ -----------
-------
------
  ---- ----------------
  ------- --------------------------
-------
-------

然后,我们需要创建客户端的入口文件 src/client/index.js,代码如下:

因为服务端已经将组件渲染成 HTML 字符串,客户端只需要将组件挂载到指定元素上即可,这里使用 ReactDom.hydrate 方法实现。

HTML 模板

最后,我们来实现 htmlTemplate 函数,用于生成 HTML 字符串。代码如下:

-- -------------------- ---- -------
-------------- - ------ -- -
  ------ -
    --------- -----
    ----- ----------
      ------
        ----- ----------------
        ------------ -----------
      -------
      ------
        ---- -----------------------
        ------- --------------------------
      -------
    -------
  -
-

htmlTemplate 函数将 HTML 内容插入到指定位置上,最终生成一个完整的 HTML 文件。

运行应用

现在,我们来运行我们的 React SSR 应用。首先,在命令行中执行以下命令,启动服务端:

然后在另外一个命令行窗口中执行以下命令,使用 Webpack 打包客户端代码:

最后,在浏览器中访问 http://localhost:3000,可以看到服务端渲染的 React 组件。

总结

本文介绍了如何使用 Webpack 搭建 React SSR 应用。我们了解了 React SSR 的工作原理,学习了 Webpack 的基本配置,并实现了服务端渲染和客户端渲染的代码,最终成功运行了应用。在实际开发中,我们可以根据需要,进一步完善应用,实现更多功能。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6451f96c675af4061b5af11a

纠错
反馈