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

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


猜你喜欢

  • MongoDB 中如何使用 $regex 查找正则表达式

    在 MongoDB 中,可以使用 $regex 运算符来执行正则表达式搜索。这种查询方式可以更加灵活地定义你的搜索模式,从而提高了数据的搜索效率和准确率。本文将详细介绍如何在 MongoDB 中使用 ...

    1 年前
  • JavaScript ES8 处理 Map/Set 数据结构的高级用法

    在 JavaScript ES8 中,新增了处理 Map 和 Set 数据结构的高级用法,使得处理这些数据结构的操作更加方便和高效。本文将详细介绍这些高级用法,并提供示例代码以供参考。

    1 年前
  • CSS Flexbox 实现垂直方向的自适应布局

    什么是 CSS Flexbox? CSS Flexbox 是一种 CSS 布局模式,它可以使容器元素中的子元素在两个轴上(水平和垂直)自由地拉伸和收缩,从而实现灵活和自适应的布局效果。

    1 年前
  • Mongoose 中的嵌套路径查询详解

    在 MongoDB 中,数据有着非常灵活的组织方式,可以嵌套存储各种类型的数据。在操作 MongoDB 数据库时,Mongoose 是一种非常方便的 ORM 工具,它可以轻松地连接 MongoDB 数...

    1 年前
  • 如何修复 CSS Reset 对 form 元素的影响?

    什么是 CSS Reset? 在网页布局的过程中,不同的浏览器对于 HTML 标签的默认样式是有所不同的,这就导致了在网站开发过程中可能会出现不一致的情况。为了解决这个问题,开发者们设计出了 CSS ...

    1 年前
  • 如何在 Node.js 中使用 Docker 进行应用部署和管理

    Docker 简介 Docker 是一个开源的应用容器引擎,可以轻松地创建,部署和管理应用程序。它实现了操作系统层面的虚拟化,使得应用程序在独立的容器中运行。 Docker 的几个主要的概念有: 镜...

    1 年前
  • 实战 Next.js 的访问控制和鉴权实践

    前言 在现代的 Web 开发中,访问控制和鉴权已经变成了必要的一环。而对于基于 React 的应用,Next.js 已经成为了一种流行的选择。在本文中,我们将学习实践如何在 Next.js 中实现访问...

    1 年前
  • TypeScript 中如何做到代码自动化测试?

    前端开发中,一旦项目越来越复杂,手工测试代码就会变得越来越困难。为了提高代码质量和开发效率,自动化测试变得越来越必要。本文将探讨 TypeScript 中如何做到代码自动化测试,帮助读者掌握如何使用一...

    1 年前
  • Angular 中使用管道实现数据转换与格式化

    在 Angular 应用程序中,我们经常需要对数据进行转换和格式化,例如在显示日期或货币金额时。为了实现这些功能,Angular 借助了管道(Pipe)这一概念,并提供了多种内置的管道供我们使用。

    1 年前
  • 史上最全的新特性解析,ES6 - ES2021

    ES6, 也称为 ECMAScript 2015,是 JavaScript 的重要更新版本之一。随后的几年,JavaScript 社区继续推出了 ES7、ES8、ES9、ES10 和 ES11 等版本...

    1 年前
  • Kubernetes 中 RBAC 权限管理实践

    Kubernetes 是一个开源的容器编排平台,通过 Kubernetes,我们可以轻松地管理容器应用程序。在 Kubernetes 的世界里,RBAC(Role-Based Access Contr...

    1 年前
  • 如何使用 ES11 中新的 String.prototype.replaceAll() 方法

    在 ES11 中,新增了一个非常方便的字符串方法 String.prototype.replaceAll(),它可以替换所有匹配项,而不仅仅是第一个。 为什么需要 String.prototype.r...

    1 年前
  • # 解决 Express.js 应用程序中缺少 favicon.ico 文件的问题

    解决 Express.js 应用程序中缺少 favicon.ico 文件的问题 当我们在使用 Express.js 开发应用程序时,我们可能会遇到一个问题:浏览器会在网站根目录下寻找一个名为 favi...

    1 年前
  • 如何使用 GraphQL 克服 REST 的限制

    REST API 是现今最流行的 API 设计风格,开发人员使用它们将数据从服务器推送到客户端。尽管 REST API 拥有许多优点,例如易于理解、简单、易于缓存和可扩展性,但也存在一些限制。

    1 年前
  • Serverless 上传函数代码时出现连接超时怎么办?

    在使用 Serverless 进行函数部署时,我们有时会遇到连接超时的问题,导致函数代码无法成功上传。这种问题可能是由于网络连接不稳定、服务器负载高等原因引起的。本文将介绍一些解决该问题的方法,帮助开...

    1 年前
  • Docker 占用过多磁盘空间的解决方法

    Docker 是一种用于构建、打包和发布应用程序的开源容器化平台。虽然 Docker 提供了方便的开发和部署体验,但是在使用 Docker 时,有时会发现 Docker 占用了过多的磁盘空间,这可能会...

    1 年前
  • Vue.js 中如何使用第三方 UI 组件库

    Vue.js 是一个流行的前端框架,它的灵活性使得开发者可以选择添加第三方 UI 组件库来扩展其功能和设计。本文将介绍如何使用第三方 UI 组件库,包括安装、配置和使用,并提供示例代码以供参考。

    1 年前
  • SSE 如何处理客户端断开连接的情况?

    单向服务器推送(SSE)是一种基于 HTTP 协议的服务器推送技术,允许服务器将实时数据传递给客户端。不同于 WebSockets,SSE 使用标准的 HTTP 1.1 协议,因此不需要建立新的网络连...

    1 年前
  • 如何在 Babel 中使用 Spread Operator 语法

    在 JavaScript 中,Spread Operator(展开语法)可以将数组或对象展开成一个列表,方便我们对它们进行迭代或拆解。但是,在某些浏览器或环境下,Spread Operator 可能会...

    1 年前
  • SPA 应用的快速导航优化:基于缓存实现快速导航

    单页应用(SPA)已经成为了当今 web 开发的主流方式之一,它能够提供更快的响应速度和更好的用户体验。然而,SPA 应用的一个瓶颈是快速导航。由于是单页应用,当用户进行下一页或回到前一页时,整个页面...

    1 年前

相关推荐

    暂无文章