React SSR 服务端渲染从入门到实战

阅读时长 12 分钟读完

React SSR 服务端渲染是一种将 React 应用程序在服务器端进行渲染的技术。当用户第一次访问一个网站时,浏览器会从服务器下载一个 HTML 文件并渲染该文件。如果使用了 React SSR 技术,服务器端将能够生成 React 组件,并将其包含在 HTML 文件中,这样用户在访问网站时可以更快地看到内容。

为什么需要 React SSR 服务端渲染?

使用 React SSR 技术可以带来以下优点:

1. 更好的 SEO

当搜索引擎抓取一个网站时,它会查看 HTML 页面并尝试理解网站的内容。如果网站是只有 JavaScript 的单页应用程序,则搜索引擎可能无法正确地解析网站的内容。但如果使用 React SSR 技术,在服务器端设置正确的 meta 标记以及其他 SEO 优化技术,搜索引擎就可以更好地解析网站。

2. 更好的性能

在使用 React SSR 技术时,一部分处理逻辑会在服务器端执行,可以减少客户端的工作量。因此,在使用 React SSR 技术时,网站可以更快地加载并响应请求。

如何开始使用 React SSR 服务端渲染?

步骤 1:安装依赖

要开始使用 React SSR 技术,需要在项目中安装一些依赖项。可以使用以下命令来安装这些依赖项:

上面的命令将安装以下软件包:

  • express:用于创建服务器
  • react:核心 React 库
  • react-dom:用于渲染 React 应用程序
  • webpack:JavaScript 模块打包器
  • babel-loader:打包器处理 Babel 语法
  • @babel/core:Babel 的核心
  • @babel/preset-env:将最新的 JavaScript 特性转换为向后兼容代码的规则集
  • @babel/preset-react:将 JSX 转换为 JavaScript

步骤 2:创建 Webpack 配置

现在可以为 React SSR 应用程序创建一个 Webpack 配置文件。在项目根目录下创建一个名为 webpack.config.js 的文件,并使用以下内容填充它:

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

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

上述配置文件将编译 ./src/index.js 文件,并将输出写入 ./dist/bundle.js 文件。它还将设置 Babel 加载器以处理 JavaScript 文件。

步骤 3:创建服务器端代码

现在可以为 React SSR 应用程序编写服务器端代码。在项目根目录下创建一个名为 server.js 的文件,并使用以下内容填充它:

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

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

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

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

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

上述代码将使用 Express 库创建一个服务器,将静态文件从 ./dist 目录提供给客户端,运行渲染 React 组件的代码,并将其渲染为字符串。服务器还会将该字符串作为响应发送给客户端,并在 HTML 中包含一个 ID 为 root 的 DIV 元素,使浏览器可以渲染整个 React 应用程序。

步骤 4:创建客户端代码

现在还需要编写客户端代码,以便 React 组件可以在客户端上运行。在项目根目录下创建一个名为 src/index.js 的文件,并使用以下内容填充它:

上述代码将使用 ReactDOM 库,将 React 组件渲染到具有 ID root 的 HTML 元素中。这样,当应用程序在浏览器中执行时,React 将继续负责这个元素的渲染。

步骤 5:运行应用程序

现在可以运行应用程序了!通过使用以下命令可以在终端中启动服务器:

然后,可以在浏览器中访问 http://localhost:3000,就会看到 React 组件被渲染到屏幕上。

React SSR 服务端渲染实战

上面的例子展示了如何在 React SSR 应用程序中使用基本的 React 组件,但是在实际应用中,可能需要更复杂的数据管理、应用程序状态等。这时,Redux 可能是一种有用的技术。

Redux 集成实例

使用 Redux 和 React SSR 技术创建应用程序的步骤:

  1. 安装依赖项:
  1. 创建 store.js 文件来创建 Redux Store,放入以下代码:
-- -------------------- ---- -------
------ - ----------- - ---- --------
----- ------------ - - -------- ------ ----- ---- --

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

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

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

以上代码将创建一个具有 loadingdata 属性的 Store,并且在调度载入和加载状态。

  1. 修改 App.js 文件,引入服务端 CSS 文件,并在组件中引用样式组件 loader.css 路径等:
-- -------------------- ---- -------
------ ------ - --------- - ---- --------
------ - ------------ ----------- - ---- --------------
------ ------ ---- -----------
------ ---------------

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

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

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

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

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

------ ------- ----
  1. 修改 server.js 文件,添加 Server 端渲染的 CSS 文件,包括Store 服务器端初始化:
-- -------------------- ---- -------
------ - -------- - ---- --------------

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

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

上述代码将初始化 Store,同时使用 Provider 组件并传递 Store 对象。服务器端使用 configureStore 函数初始化 Store,设置初始状态属性。

  1. 修改 index.js 文件,提取 Server 端传来的预加载状态,并传递给 Client 端的 Store 对象,保证 Client 端和 Server 端状态一致:
-- -------------------- ---- -------
------ ----- ---- --------
------ -------- ---- ------------
------ - -------- - ---- --------------
------ - ------- - ---- ------------
------ --- ---- --------
------ -------------- ---- -------------

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

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

以上步骤将在 React SSR 应用程序中引入 Redux 技术:通过 Store 管理应用程序的状态,并在客户端和服务端之间维护状态的一致性。

总结

本文介绍了 React SSR 服务端渲染的基本概念,并提供了基本的 React SSR 实现示例。然后,介绍了如何使 React SSR 在 Redux 应用程序中起作用,展示了如何在服务端和客户端之间维护应用程序状态的一致性。React SSR 技术能够提高应用程序的性能和 SEO,但需要更多的学习和维护。希望读者能够在实际应用中使用 React SSR 并得到不错的体验。

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

纠错
反馈