Next.js 实战:从零构建服务端渲染应用

随着 Web 应用程序的发展,客户端渲染已成为前端开发的主流模式。然而,对于一些需要 SEO、快速渲染和性能优化的应用程序而言,服务端渲染(SSR)是不可避免的。

在本文中,我们将介绍 Next.js,一个基于 React 的服务端渲染框架,以及如何从零开始构建一个服务端渲染应用程序。本文中的示例代码将演示如何使用 Next.js 构建一个简单的博客应用,展示了 Next.js 的主要特点和功能。

开始

在开始本文之前,请确保你已经了解了以下知识:

  • React 基础
  • Node.js 基础
  • npm 或 yarn 的基础使用方法

如果你还不了解这些知识,请先学习下面的资源:

创建一个 Next.js 应用程序

首先,我们需要使用 Next.js 的 CLI 工具来创建一个基本的项目架构。

打开命令行界面,输入以下命令:

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

或者

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

这会自动创建一个名为 my-blog 的项目,并将相关的依赖项安装到你的项目中。

目录结构

在创建项目之后,你的文件夹结构应该类似于:

--------
  ------
    --------
    ------
      ---------
    ----
      --------
    -------
    ------------
  -------
    -----------
    ---
  • pages 文件夹中存放页面文件。Next.js 会自动根据文件名将其转换为 URL,并使用服务端渲染。例如,/pages/index.js 将被渲染为应用程序的主页。
  • public 文件夹中存放公共文件,例如图标和样式文件。
  • api 文件夹中存放 API 路由文件。Next.js 会自动创建一个可响应 HTTP 请求的 API 端点。
  • _app.js_document.js 为 Next.js 中两个特殊文件,可以用来进行全局的样式和文档操作。

创建首页

我们从首页开始,创建 pages/index.js 文件:

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

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

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

该代码首先导入了 Head 组件,以便我们设置页面的标题和图标。接着,它创建了一个简单的欢迎信息。

现在,我们可以启动本地服务器并访问应用程序。在命令行界面中,输入以下命令:

--- --- ---

或者

---- ---

这会启动一个本地服务器,并将应用程序运行在 http://localhost:3000 上。

访问该页面,你应该会看到:

创建帖子页面

接下来,我们需要创建一个页面,用于显示博客帖子。

pages/posts/[slug].js 中,我们将创建一个动态路由,根据 URL 上的 slug 参数显示相应的博客帖子内容:

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

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

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

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

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

该代码首先导入了 Head 组件和 useRouter 钩子,以便我们设置页面的标题和读取 URL 中的参数。

我们使用 useRouter 钩子获取路由器实例,并使用 router.query 读取参数。接着,我们使用参数来设置帖子的标题和内容。

现在,我们可以尝试访问一个帖子页面,例如:http://localhost:3000/posts/1,您应该会看到:

创建博客 API

现在,我们需要创建一个 API 端点,用于提供博客帖子数据。在 pages/api/posts.js 中,我们将创建一个简单的 HTTP API,返回一个帖子列表:

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

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

该代码导出一个名为 handler 的函数,该函数接收 HTTP 请求和响应对象作为参数。我们创建了一个包含三个帖子的数组,并将其返回给 HTTP 客户端。

现在,我们可以访问博客 API 端点,并获取帖子列表。在命令行界面中,输入以下命令:

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

你应该会看到以下输出:

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

获取博客帖子

现在,我们已经创建了一个帖子列表的 API 端点。我们需要在客户端代码中调用该端点,并使用 getStaticProps 函数获取数据。

pages/index.js 中,我们将使用 fetch 函数以异步方式获取博客帖子列表:

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

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

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

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

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

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

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

该代码首先导入 HeadLinkuseStateuseEffect 组件和钩子,以便我们设置页面的标题和处理状态。我们使用 fetch 函数异步获取博客帖子列表,并将其存储在状态变量中。

接着,我们将帖子列表映射为一个元素列表,并使用 Link 组件来创建指向每个帖子详细信息的链接。

现在,我们可以重新启动服务器并访问主页。您应该会看到我们的博客帖子列表:

获取帖子详细内容

现在,我们已经为博客帖子创建了详细页面。我们需要获取帖子的详细信息并在页面上呈现。

pages/posts/[slug].js 中,我们将使用 getStaticPathsgetStaticProps 函数从帖子 API 中获取详细信息:

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

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

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

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

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

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

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

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

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

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

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

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

该代码首先导入 HeaduseRouter 组件和钩子,以便我们设置页面的标题和读取 URL 中的参数。

我们使用 getStaticPaths 函数生成包含所有博客帖子的路径列表,并使用 getStaticProps 函数从 API 中获取相应的帖子详细信息。

getStaticPaths 函数中,我们使用 fetch 函数异步获取博客帖子列表,并使用 map 函数将其转换为带有 slug 参数的路径列表。

getStaticProps 函数中,我们使用 fetch 函数异步获取帖子详细信息,并将其作为 props 返回。这允许我们在页面中使用 props.post 访问帖子详细信息。

如果没有匹配的路径,我们将使用 fallback 选项在查找帖子详细信息时使用加载状态。

部署应用程序

现在,我们已经创建了一个完整的服务端渲染的博客应用程序。我们需要将其部署到云端服务器中,以便全球用户访问。在这里,我们可以使用 Vercel 提供的自动化云服务,实现快速部署、自动化急速构建和度量网站性能。

请按照以下步骤部署应用程序:

  1. 创建一个 Vercel 帐户。
  2. 将代码推送到 GitHub 或 GitLab。
  3. 打开 Vercel 控制台,导入你的代码仓库并选择项目。
  4. 检查执行脚本和环境变量,并添加必要的环境变量。
  5. 点击“部署”按钮,等待部署完成。
  6. 访问你的应用程序,并确保已成功部署。

现在,我们已经成功部署了应用程序,并可以在云端服务器中访问它。

结论

在本文中,我们介绍了 Next.js,一个基于 React 的服务端渲染框架,并使用一个简单的博客应用程序演示了它的用法。

我们了解了 Next.js 中的页面路由、API 端点、数据获取和部署等方面,并使用这些功能构建了一个完整的服务端渲染的应用程序。

Next.js 提供了一种快速、简单和可靠的方式来构建服务端渲染应用程序,它是 Web 应用程序开发的一种完美选择。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/66f6aa0fc5c563ced58b10c5


猜你喜欢

  • 如何让 Enzyme 支持使用 styled-components 编写的 React 组件

    Enzyme 是 React 生态中的一个测试工具,而 styled-components 则是一个基于组件的 CSS-in-JS 库。由于它们都在实践中表现出色,因此使用它们来编写 React 应用...

    2 个月前
  • 在 Chai 中如何判断两个对象是否不相等

    在 Chai 中如何判断两个对象是否不相等 Chai 是一个 JavaScript 的断言库,常常用于前端的自动化测试中。在测试时,我们需要断言一些结果与期望值是否相等。

    2 个月前
  • Android Material Design 中使用 RecyclerView 实现数据分页的推荐方法

    在 Android 应用开发中,数据分页是一个常见的需求。而随着 Android Material Design 的推出,使用 RecyclerView 实现数据分页已成为了一种流行的方法。

    2 个月前
  • Vue.js 中使用 vue-select 实现下拉选择框功能

    简介 Vue.js 是一款流行的 JavaScript 框架,可以用来构建现代化的 Web 应用程序。它不仅易于上手,而且功能强大,特别适合用于开发前端界面。在 Vue.js 中,使用 vue-sel...

    2 个月前
  • React 中如何优化渲染效率

    React 是一个流行的前端框架,它通过虚拟 DOM 和组件化的开发方式,来提高应用的开发效率和性能。但是,在开发复杂应用时,可能会出现一些性能问题,如渲染速度慢、内存占用过高等。

    2 个月前
  • 响应式设计中的 Google Font 字体使用技巧

    在响应式设计中,字体的使用至关重要。一方面,合适的字体能够使网站内容更加易读、易懂;另一方面,其重要性在于,字体的大小和样式常常是响应式设计中的关键因素之一。而在众多字体中,Google Font 可...

    2 个月前
  • 如何使用 Angular 进行国际化

    如何使用 Angular 进行国际化 国际化是一个现代化的需求,如何使得应用程序能够跨语言和地域进行运行,是一个前端工程师必须面对的问题。Angular 是一款流行的前端框架,它提供了国际化的支持,下...

    2 个月前
  • Redux-persist 状态持久化最佳实践

    Redux-persist 是一个用于将 Redux 状态持久化的库。状态持久化可以帮助我们在刷新页面后保持应用程序的状态。使用 Redux-persist,我们可以轻松地将应用程序的状态存储在本地存...

    2 个月前
  • 如何正确地实现 ES9 的 Object.fromEntries() 方法

    随着 ECMAScript 2018 (ES9) 的发布,《JavaScript 高级程序设计》(第 4 版)引入了一些新的特性,其中之一便是 Object.fromEntries() 方法。

    2 个月前
  • 使用 Docker 部署 Nginx 反向代理应用实践

    在前端开发中,我们经常需要使用 Nginx 反向代理来解决跨域和负载均衡等问题。而使用 Docker 部署 Nginx 反向代理应用可以大大简化部署过程,加快开发效率。

    2 个月前
  • Serverless 入门 | 你不知道的 CLI

    前言 最近几年,Serverless 架构成为前端开发的热门话题。相比传统的架构方式,Serverless 有着更低的维护成本、更高的可扩展性和更快的部署速度。但是对于初学者来说,了解Serverle...

    2 个月前
  • ES6 中新增的 Spread and Rest 运算符详解

    ES6 是 JavaScript 中的一个重要更新版本,其中新增了 Spread 和 Rest 运算符。它们是一种语法糖,可以让我们更方便地操作数组和对象,并且可以极大地减少代码的复杂度。

    2 个月前
  • 利用 Vue.js 打造高性能 SPA 应用:如何减少 HTTP 请求数?

    在现代 Web 应用中,SPA(单页应用)已成为一种流行的前端架构,它可以让用户在一个页面内浏览内容,无需每次跳转网页,从而提供更流畅的用户体验。但是,随着应用的不断发展,HTTP 请求数量也会不断增...

    2 个月前
  • LESS 中使用 transform 时需要注意的事项和技巧

    1. 概述 transform 是 CSS3 中非常重要的一个属性,它可以对元素进行旋转、平移、缩放和斜切等操作。在前端开发中,我们通常使用 LESS 来优化 CSS 的编写和维护,而在 LESS 中...

    2 个月前
  • 使用Socket.io实现虚拟主机

    Socket.io是一个非常流行的开源库,用于实现网络通信,在前端和后端之间进行实时双向通讯。虚拟主机是Web服务器中的一个重要概念,它允许我们在同一服务器上运行多个域名和应用程序,从而将服务器资源最...

    2 个月前
  • 使用 TailwindCSS 美化移动端网页

    使用 TailwindCSS 美化移动端网页 前言 移动设备已经成为我们日常生活中必需的交互工具,对于 web 前端开发人员来说,移动端开发已经是必备技能。在移动端开发中,除了保证良好的交互体验之外,...

    2 个月前
  • MongoDB 中 `find()` 查询方法的使用方式详解

    在 MongoDB 中,find() 方法是最常用的一种查询数据的方法。它可以用于检索符合条件的文档或者集合中的所有文档,并返回一个结果集合。在本文中,我们将详细介绍 find() 方法的使用方式。

    2 个月前
  • 使用 Custom Elements 和 RxJS 构建响应式 UI 组件

    在前端开发中,构建高质量的 UI 组件是非常重要的事情,而使用 Custom Elements 和 RxJS 技术,可以帮助我们更加轻松和高效地构建响应式 UI 组件。

    2 个月前
  • Performance Optimization:使用 PGO 和 LTO 调优 C++ 应用性能

    Performance Optimization:使用 PGO 和 LTO 调优 C++ 应用性能 性能优化是软件开发的核心问题之一。虽然编程语言、编译器和硬件的发展已经使得软件运行速度得到了大幅改善...

    2 个月前
  • 如何优化 Redux 的性能

    Redux 是一个非常流行的 JavaScript 应用程序状态管理工具,它能够帮助我们更好地管理复杂的应用程序状态。但是,随着应用程序变得更加复杂,性能也会成为一个问题。

    2 个月前

相关推荐

    暂无文章