使用 Next.js 从零开始创建完整的 Web 应用

在前端开发中,开发者们通常使用 React.js 来构建 UI 界面,而 Next.js 则是一个非常有用的工具,它将 React.js 和服务端渲染结合起来,使得网站能够更好地被搜索引擎收录和优化。

本文将向您介绍如何使用 Next.js 从零开始创建一个完整的 Web 应用程序。在此过程中,我们将探讨以下主题:

  • 创建一个基本的 Next.js 应用程序
  • 配置页面路由
  • 嵌入样式和第三方库
  • 使用服务端渲染预渲染页面
  • 从服务器获取数据并将其传递给前端组件

让我们开始吧!

准备工作

首先,您需要在本地安装 Node.jsnpm。如果您还没有安装过它们,可以访问官方网站进行安装。

创建一个基本的应用

我们将使用 Next.js 官方提供的快速启动应用程序来创建一个基本的 Next.js 应用程序,步骤如下:

  1. 打开终端或控制台,导航到您想要创建应用程序的目录下。

    -- ---------------
  2. 运行以下命令,创建一个新的 Next.js 应用程序。

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

    此命令将在您的当前目录下创建一个名为 my-app 的新应用程序。执行此命令可能需要一段时间,请耐心等待。完成后,您应该可以看到以下输出:

    ---
    -------- ------- ------ -- ----------------------
    ------ ---- ---------- --- --- --- ------- ---------
    
    --- --- ---
        ------ --- ----------- -------
    
    --- --- -----
        ------ --- --- --- -----------
    
    --- --- -----
        ---- --- ----- --- -- ---------- -----
    
    -- ------- ---- --- ----- -- -------
    
    -- ------
    --- --- ---
  3. 进入新的应用程序目录并启动开发服务器。

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

    此命令将启动一个本地开发服务器,并将您的应用程序运行在 http://localhost:3000 上。可以在 Web 浏览器中访问此 URL,应该可以看到一个基本的 Next.js 应用程序的欢迎页面。

    (注意:如果您使用的是 Windows 系统,请使用 npx.cmd 代替 npx 运行命令,并在运行 npm run dev 命令时设置您的环境变量为 set NODE_ENV=development && next dev。)

好的,现在我们已经成功创建了一个基本的 Next.js 应用程序。下一步是更改默认的页面和添加自己的内容。

配置页面路由

在创建应用程序时,您可能已经注意到 pages 目录中有一个名为 index.js 的文件。这是 Next.js 中默认的页面。当访问主页时,将使用此页面进行渲染。

如果您点击文件夹,可以看到 Next.js 预设为相应地创建其他页面,可以直接在 pages 文件夹中添加其他页面。每个文件将创建一个新的路由,您可以直接通过 /{文件名} 访问该路由。

例如,需要创建一个名为“关于”的页面,因此可以创建一个名为 about.js 的新文件,如下所示:

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

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

将该文件保存到 pages 目录中。然后,您可以通过访问 http://localhost:3000/about 来访问新的“关于”页面。

此外,如果某个页面应该基于某些数据或参数进行渲染,则可以使用动态路由。例如,在我们的应用程序中,我们可能需要显示单个产品的详细信息页面。我们可以使用动态路由来处理此情况。首先,创建名为 pages/products/[id].js 的文件,如下所示:

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

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

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

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

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

请注意上面的代码中的两个重要函数:getStaticPathsgetStaticProps。这些函数与 Next.js 中的数据获取和预渲染相关联。我们稍后会对此再深入讨论。

现在,您可以通过访问 http://localhost:3000/products/1http://localhost:3000/products/2 来访问具有此页面的产品详细信息页面。

嵌入样式和第三方库

一旦您开始创建多个页面,通常会希望向它们添加样式。Next.js 支持在页面级别上嵌入样式。

例如,下面的 index.js 页面显示如何嵌入页面级别样式:

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

此外,Next.js 还支持全局 CSS。在 pages 目录下创建一个名为 _app.js 的文件。在这里,您可以使用 import 导入全局 CSS 样式表并将其应用于整个应用程序。

下面是一个简单的示例 _app.js 文件,演示如何使用全局 CSS:

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

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

在上面的代码示例中,我将 main.css 文件保存在 styles 目录中,并在 _app.js 文件中引入它。在运行应用程序时,此样式表将应用到整个应用程序。

在使用下面的代码示例导入第三方库时,您可能会遇到一些问题:

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

由于 Next.js 在服务端渲染时运行,而浏览器中不支持服务器端的 React.js 组件,因此您需要特别处理一下依赖的代码。您需要在您的项目根目录下新建一个 next.config.js 文件:

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

这将告诉 Next.js 不要抱怨使用了服务器端代码。有了这个安排,我们就可以使用 react-markdown 库了:

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

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

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

使用服务端渲染预渲染页面

Next.js 的另一个强项是预渲染功能。预渲染是指生成 HTML 静态文件,以便它们可以被直接访问,而无需在每个请求时重新生成。

预渲染可以提高应用程序的性能并降低对服务器的负载。当然,这并非每个应用程序都需要预渲染,但如果您有许多没有动态数据的内容页面,那么预渲染可能会是很好的优化方式。

您可以使用两种预渲染方案:静态生成和服务端渲染。静态生成是指在您的应用构建时,将所有页面预先呈现并将它们存储为 HTML 文件。这种方法非常适合不经常更改的内容页面,因为它们可以直接从 CDN、静态存储或缓存中提供,而无需访问服务器。

然而,静态生成并不适用于包含动态内容的页面。如果您需要在页面上显示用户数据或从某个服务上检索数据,那么使用服务端渲染可能是更好的解决方案。使用服务端渲染,可以在每次请求时对页面进行渲染。

Next.js 支持两种类型的服务端渲染:getServerSidePropsgetStaticProps。前者对于从 API 检索数据或使用一些动态传递的查询参数的页面非常有用;后者则用于从外部数据源获取并呈现静态页面。

这里是一个示例:如何使用服务端渲染添加动态动态数据到页面:

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

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

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

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

首先,我们定义了一个名为 Post 的 React.js 组件。然后,我们创建一个名为 getServerSideProps 的异步函数,以便从外部数据源获取数据。在此示例中,我们使用 JSONPlaceholder API 获取数据,并将其传递给 Post 组件。数据将作为组件的属性传递,并在呈现组件时使用。

总结

至此,我们已经学习了如何从零开始创建一个使用 Next.js 的完整的 Web 应用程序。通过本文,您应该已经了解到如下主题:

  • 如何使用 Next.js 创建一个新的应用程序
  • 如何配置页面路由
  • 如何嵌入样式和第三方库
  • 如何使用服务端渲染预渲染页面

现在,您可以继续发掘 Next.js 更多功能,并将其用于您的下一个 Web 应用程序项目中。祝你好运!

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


猜你喜欢

  • RxJS 异常处理之 SwitchMap 中的错误处理

    在 RxJS 中,switchMap 是一个常用的操作符,它用于处理一个 Observable 序列,并返回一个新的 Observable 序列。然而,当我们用 switchMap 进行数据转换时,难...

    1 年前
  • 如何使用 Flask 开发 RESTful API

    RESTful API 是一种提供 Web 服务的方式,它可以使客户端和服务器之间的交互变得更加简单和高效。Python 中最流行的 Web 开发框架之一,Flask,提供了便捷的方式来构建 REST...

    1 年前
  • Custom Elements 开发实用技巧:提高开发效率,降低出错风险

    Custom Elements 是 Web Components 的基础,它提供了帮助开发人员定义自己的 DOM 元素的能力。本文将会介绍一些实用技巧,以便实现更好的开发体验和效率。

    1 年前
  • Redis 集群模式下如何进行数据迁移?

    Redis 是一个高性能的 key-value 存储系统,使用内存作为存储介质。Redis 可以分为单机模式和集群模式,集群模式可以支持数据分片,水平扩展等操作,但是遇到数据迁移问题,就需要我们仔细考...

    1 年前
  • 在 Socket.io 中使用 Redis 适配器

    在开发实时应用或者聊天室等实时通讯产品时,常常会使用 Socket.io 库来实现双向通信。而在多台服务器间协调此类通讯,则需要使用适配器来处理不同服务器和进程间的消息同步和负载均衡等问题。

    1 年前
  • MongoDB 集群部署经验总结

    前言 在现代化的 Web 应用程序中,数据存储是非常重要的。随着应用程序数据量的不断增加,如何有效地存储和管理这些数据也成为事关应用程序性能和用户体验的重要因素。作为一种高效、灵活的 NoSQL 数据...

    1 年前
  • Angular 8 和 Material Design:构建现代 Web 应用程序

    随着互联网的不断发展,Web 应用程序已经成为了信息化时代最主要的工具之一。在这样的背景下,前端开发技术也变得愈发重要。Angular 8 和 Material Design 是当前最流行的前端开发框...

    1 年前
  • Fastify 踩坑记录:解决 “Can't set headers after they are sent” 问题

    如果你正在使用 Fastify 构建 Web 应用程序,你可能会遇到 "Can't set headers after they are sent" 错误。这个错误表明你的应用程序在发送 HTTP 响...

    1 年前
  • 用 CSS Reset 取消 margin-collapse 带来的影响

    在网页设计和开发中,CSS 是一个关键的部分。CSS 用来控制文档的呈现形式,包括其外观和样式。然而,一些 CSS 样式属性可能会导致一些问题,其中一个典型的问题是 margin-collapse。

    1 年前
  • 解决 Kubernetes 中 Service 对象的负载均衡问题

    Kubernetes 是一款非常流行的容器编排系统,它支持在集群中运行容器应用。在 Kubernetes 中,Service 对象是一种非常重要的资源对象,它允许我们定义一组需要提供服务的 Pod,并...

    1 年前
  • Server-sent Events 在智能客服系统中的应用

    在现代的智能客服系统中,实时通信和实时更新是十分重要的。而 Server-sent Events (SSE) 是一种轻量级的、简单易用的实时通信技术,它可以帮助我们在客户端和服务端之间建立一条长连接,...

    1 年前
  • Chai 断言库:如何测试浮点数?

    引言 在前端开发中,测试是一个重要的环节,而断言库则是测试中必不可少的一部分。Chai 是一个比较流行的 JavaScript 断言库,具有可扩展性和易于使用的特点,可以在 Node.js 和浏览器环...

    1 年前
  • 解决PM2在Windows系统下不能正常启动的问题

    在使用Node.js开发Web应用时,PM2是一个非常好用的进程管理工具。但是,在Windows系统下使用PM2可能会出现无法正常启动的问题,本文将介绍如何解决这个问题。

    1 年前
  • 使用 Enzyme 进行测试驱动 React 应用程序的极简指南

    React 是一种用于构建用户界面的 JavaScript 库,而 Enzyme 是一个 React 应用程序的测试工具库。它提供了一系列 API,可以帮助我们对 React 组件进行测试。

    1 年前
  • TypeScript 中如何正确使用命名空间

    随着 TypeScript 在前端领域越来越流行,使用命名空间来组织代码也变得越来越重要。命名空间提供一种逻辑上分组的方式,使得我们更方便地管理代码,并减少命名冲突。

    1 年前
  • 使用 Material Design 创建美观的 UI 画面

    Material Design 是一种设计语言,由 Google 开发,用于移动和 Web 应用程序的 UI 设计。它是一种半平面、半立体的设计风格,是一种平面设计和现实世界之间的平衡。

    1 年前
  • Webpack devServer 实现代理服务器的详细步骤

    Webpack 是一个现代化的 JavaScript 应用程序的静态模块打包工具。它的功能非常强大,能够将多个 JavaScript 文件(包括 CSS、图片、字体等资源)打包成一个 JavaScri...

    1 年前
  • 如何让 LESS 渲染出正确的 CSS 样式?

    在前端开发中,CSS 样式表是必不可少的。在实际开发中,我们通常会使用预处理器来更高效地编写样式代码。LESS 是一种很流行的 CSS 预处理器,它可以让我们在 CSS 的基础上获取更多的功能和优势。

    1 年前
  • Mocha + Chai + Sinon.js 实现 Node.js 单元测试

    在前端开发中,单元测试是非常重要的一环。单元测试是指在应用程序内部对最小的可测试单元进行测试的过程,目的是为了保证程序的正确性和稳定性。本文将介绍使用 Mocha、Chai 和 Sinon.js 来实...

    1 年前
  • PWA 中如何实现应用角标和任务栏通知

    随着移动设备的普及,PWA(Progressive Web App)已经成为了前端开发中热门的话题之一,PWA 是一种可以离线访问的 Web 应用程序,它的最大优势是可以充分利用浏览器的能力,使得 W...

    1 年前

相关推荐

    暂无文章