”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Next.js 简介:构建您的第一个应用程序

Next.js 简介:构建您的第一个应用程序

发布于2024-11-06
浏览:192

Next.js 是一种流行的 React 框架,使开发人员能够创建快速的服务器渲染应用程序。它提供了强大的开箱即用功能,例如静态站点生成 (SSG)、服务器端渲染 (SSR) 和 API 路由。在本指南中,我们将逐步介绍构建您的第一个 Next.js 应用程序的过程,重点关注关键概念和实际示例。

1. 设置您的 Next.js 项目

要开始使用 Next.js,您需要在计算机上安装 Node.js。设置 Node.js 后,您可以使用以下命令创建新的 Next.js 应用程序:

npx create-next-app my-next-app

此命令创建一个名为 my-next-app 的新目录,其中包含启动 Next.js 应用程序所需的所有文件和依赖项。

2. 浏览项目结构

创建项目后,导航到项目目录:

cd my-next-app

在 my-next-app 目录中,您会发现类似于以下的结构:

my-next-app/
├── node_modules/
├── pages/
│   ├── api/
│   ├── _app.js
│   ├── index.js
├── public/
├── styles/
│   ├── Home.module.css
├── package.json
└── README.md

pages 目录是您创建应用程序页面的位置,而 public 用于静态资源。

3. 创建您的首页

Next.js 使用基于文件的路由系统。要创建新页面,只需在页面目录中添加新的 JavaScript 文件即可。例如,创建一个名为 about.js:
的文件

// pages/about.js
import Link from 'next/link';

export default function About() {
  return (
    

About Page

This is the about page of my first Next.js application!

Go back home
); }

在此示例中,我们创建了一个简单的“关于”页面,并使用“链接”组件导航回主页。

4. 修改首页

打开pages目录下的index.js文件。该文件代表您的应用程序的主页。可以修改如下:

// pages/index.js
import Link from 'next/link';
import styles from '../styles/Home.module.css';

export default function Home() {
  return (
    

Welcome to My Next.js App

This is my first application built with Next.js.{' '} Learn more about me

); }

在这里,我们添加了一些简单的样式和“关于”页面的链接。

5. 向您的应用程序添加样式

Next.js 支持开箱即用的 CSS 模块。要设置组件的样式,您可以在 styles 目录中创建 CSS 模块。例如,创建一个名为 Home.module.css:
的文件

/* styles/Home.module.css */
.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
  font-family: Arial, sans-serif;
}

接下来,将此 CSS 模块导入到您的 index.js 页面中,如上一节所示。

6. 使用 Next.js 获取数据

Next.js 可以轻松地使用 getStaticProps 进行静态站点生成或使用 getServerSideProps 进行服务器端渲染来获取数据。例如,要获取首页的数据,可以这样修改index.js:

// pages/index.js
export async function getStaticProps() {
  const res = await fetch('https://jsonplaceholder.typicode.com/posts');
  const posts = await res.json();

  return {
    props: { posts },
  };
}

export default function Home({ posts }) {
  return (
    

Welcome to My Next.js App

    {posts.map(post => (
  • {post.title}
  • ))}
); }

在此代码中,我们从公共 API 获取帖子列表并将其显示在主页上。

7. 创建API路由

Next.js允许您在pages/api目录中创建API路由。这些路由可用于构建您的后端功能。例如,在pages/api目录下创建一个名为hello.js的文件:

// pages/api/hello.js
export default function handler(req, res) {
  res.status(200).json({ message: 'Hello from Next.js API!' });
}

您可以通过导航到 http://localhost:3000/api/hello 来访问此 API 路由。

8. 部署您的 Next.js 应用程序

应用程序准备就绪后,您就可以轻松部署它。 Vercel 是推荐的 Next.js 应用程序托管平台。您可以按照以下步骤部署您的应用程序:

  1. 如果您没有 Vercel 帐户,请创建一个帐户。

  2. 全局安装 Vercel CLI:

    npm install -g vercel
    
  3. 在项目目录中运行以下命令:

    vercel
    
  4. 按照提示部署您的应用程序。

9. 添加动态路由

Next.js 支持使用括号的动态路由。例如,如果要创建动态博文页面,可以在pages/posts目录下创建一个名为[id].js的文件:

// pages/posts/[id].js
import { useRouter } from 'next/router';

export default function Post() {
  const router = useRouter();
  const { id } = router.query;

  return 

Post: {id}

; }

您现在可以通过导航到 /posts/1、/posts/2 等访问特定帖子。

10. 实施全局样式

如果你想将全局样式应用到你的应用程序中,你可以通过在pages目录中创建一个名为_app.js的文件来实现:

// pages/_app.js
import '../styles/globals.css';

export default function App({ Component, pageProps }) {
  return ;
}

接下来,在 styles 目录中创建一个 globals.css 文件并添加全局样式:

/* styles/globals.css */
body {
  margin: 0;
  padding: 0;
  font-family: Arial, sans-serif;
  background-color: #f0f0f0;
}

11.使用环境变量

Next.js 支持环境变量来存储敏感信息。您可以在项目的根目录中创建一个 .env.local 文件并添加变量:

API_URL=https://example.com/api

然后您可以使用 process.env:
在应用程序中访问此变量

// Example usage in a component
const apiUrl = process.env.API_URL;

恭喜构建您的第一个 Next.js 应用程序!在整个旅程中,您学习了如何设置项目、创建动态页面、无缝获取数据、实现强大的路由以及轻松部署应用程序。

Next.js 不仅仅是一个框架;它是一个框架。它是一个强大的工具,可以显着增强您的 Web 开发体验。其内置功能(例如静态站点生成 (SSG) 和服务器端渲染 (SSR))使您能够创建快速、用户友好的应用程序,并针对性能和 SEO 进行了优化。

Next.js 之旅的后续步骤

现在您已经成功构建了您的第一个 Next.js 应用程序,是时候将您的技能提升到一个新的水平了。在即将发布的帖子系列中,我们将深入研究 Next.js 的一些更高级的功能,这些功能可以增强您的应用程序并简化您的开发流程。

中间件是一项强大的功能,允许您通过在请求完成之前添加自定义逻辑来扩展应用程序的功能。这意味着您可以操纵请求和响应对象、对用户进行身份验证,甚至无缝管理重定向。

接下来,我们将探索静态站点生成(SSG)。该技术在构建时预渲染页面,从而实现快速加载并提高 SEO 性能。通过了解如何利用 SSG,您可以创建不仅动态而且高效的应用程序。

最后,我们将介绍 API 路由,该功能允许您直接在 Next.js 应用程序中构建无服务器函数。这意味着您无需单独的服务器即可处理请求和响应,从而更轻松地以更少的开销开发全栈应用程序。

跟随我,我们踏上了探索 Next.js 高级功能的激动人心的旅程。有了这些工具,您将能够构建真正脱颖而出的强大、高性能的应用程序。请继续关注我们的下一篇文章!

您还可以阅读这篇文章:

Introduction to Next.js: Building Your First Application

Next.js 简介:构建您的第一个应用程序

Next.js 是一种流行的 React 框架,使开发人员能够创建快速的服务器渲染应用程序。它提供了开箱即用的强大功能!

Introduction to Next.js: Building Your First Application salmaniyad.hashnode.dev

在以下位置找到我:

Introduction to Next.js: Building Your First Application

萨尔曼·伊亚德 · GitHub

计算机系统工程师|网络开发人员。 SalmanIyad 有 31 个可用的存储库。在 GitHub 上关注他们的代码。

Introduction to Next.js: Building Your First Application github.com
版本声明 本文转载于:https://dev.to/salmaniyad/introduction-to-nextjs-building-your-first-application-e82?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 网页抓取 - 有趣!
    网页抓取 - 有趣!
    一个很酷的术语: CRON = 按指定时间间隔自动安排任务的编程技术 网络什么? 在研究项目等时,我们通常会从各个网站编写信息 - 无论是日记/Excel/文档等。 我们正在抓取网络并手动提取数据。 网络抓取正在自动化这一过程。 例子 当在网上搜索运动鞋时,它会显示包...
    编程 发布于2024-11-06
  • 感言网格部分
    感言网格部分
    ?在学习 CSS 网格时刚刚完成了这个推荐网格部分的构建! ?网格非常适合创建结构化布局。 ?现场演示:https://courageous-chebakia-b55f43.netlify.app/ ? GitHub:https://github.com/khanimran17/Testimonia...
    编程 发布于2024-11-06
  • 为什么 REGISTER_GLOBALS 被认为是 PHP 中的主要安全风险?
    为什么 REGISTER_GLOBALS 被认为是 PHP 中的主要安全风险?
    REGISTER_GLOBALS 的危险REGISTER_GLOBALS 是一个 PHP 设置,它允许所有 GET 和 POST 变量在 PHP 脚本中用作全局变量。此功能可能看起来很方便,但由于潜在的安全漏洞和编码实践,强烈建议不要使用它。为什么 REGISTER_GLOBALS 不好?REGIS...
    编程 发布于2024-11-06
  • Nodemailer 概述:在 Node.js 中轻松发送电子邮件
    Nodemailer 概述:在 Node.js 中轻松发送电子邮件
    Nodemailer 是一个用于发送电子邮件的 Node.js 模块。以下是快速概述: Transporter:定义电子邮件的发送方式(通过 Gmail、自定义 SMTP 等)。 const transporter = nodemailer.createTransport({ ... }); ...
    编程 发布于2024-11-06
  • JavaScript 中的轻松错误处理:安全赋值运算符如何简化您的代码
    JavaScript 中的轻松错误处理:安全赋值运算符如何简化您的代码
    JavaScript 中的错误处理可能很混乱。将大块代码包装在 try/catch 语句中是可行的,但随着项目的增长,调试就变成了一场噩梦。幸运的是,有更好的方法。输入 安全赋值运算符 (?=) - 一种更干净、更有效的错误处理方法,使代码保持可读性并简化调试。 什么是安全赋值运算符...
    编程 发布于2024-11-06
  • Javascript 很难(有悲伤)
    Javascript 很难(有悲伤)
    这将是一个很长的阅读,但让我再说一遍。 JAVASCRIPT很难。上次我们见面时,我正在踏入 Javascript 的世界,一个眼睛明亮、充满希望的程序员踏入野生丛林,说“这能有多难?”。我错得有多离谱??事情变得更难了,我(勉强)活了下来,这是关于我的旅程的一个小混乱的故事。 变量:疯狂的开始 ...
    编程 发布于2024-11-06
  • ## 您可以在不使用 JavaScript 的情况下使用 CSS 创建饼图分段吗?
    ## 您可以在不使用 JavaScript 的情况下使用 CSS 创建饼图分段吗?
    使用 CSS 在圆中分段使用 border-radius 在 CSS 中创建圆是一种常见的做法。但是,我们可以通过分段(类似于饼图)实现类似的效果吗?本文深入研究了仅通过 HTML 和 CSS 实现此目的的方法,不包括使用 JavaScript。生成相等大小的段相等大小段的一种方法涉及生成以下内容的...
    编程 发布于2024-11-06
  • 从头开始构建一个小型矢量存储
    从头开始构建一个小型矢量存储
    With the evolving landscape of generative AI, vector databases are playing crucial role in powering generative AI applications. There are so many vect...
    编程 发布于2024-11-06
  • 如何在Chrome中使用AI实验API
    如何在Chrome中使用AI实验API
    要在 Chrome 中使用实验性 AI API,请按照以下步骤操作: 硬件要求 4GB 内存 GPU可用 至少 22GB 空间 Windows 10.11 或 macOS Ventura 或更新版本(无 Linux 规范) 尚不支持: Chrome操作系统 Chrome iOS Ch...
    编程 发布于2024-11-06
  • 评论:Adam Johnson 的《Boost Your Django DX》
    评论:Adam Johnson 的《Boost Your Django DX》
    书评很微妙。您不想破坏它,但您也想让潜在读者体验一下所期待的内容。这是提供背景和保持兴趣之间的巧妙平衡。我试图在这篇评论中达到这种平衡,为您提供足够的内容来吸引您,而不透露太多。 一个小背景故事:我第一次从 Djangonaut Space 的好朋友 Tim 那里听说这本书,并将其添加到我的阅读列表...
    编程 发布于2024-11-06
  • 如何对数组元素进行分组并组合多维数组中另一列的值?
    如何对数组元素进行分组并组合多维数组中另一列的值?
    按列对数组元素进行分组并组合另一列中的值给定一个包含两列嵌套数组的数组,任务是将基于特定列的子数组,并将每个组中另一列的值连接起来,生成一个以逗号分隔的列表。考虑以下示例数组:$array = [ ["444", "0081"], ["...
    编程 发布于2024-11-06
  • 三个新添加的例外功能
    三个新添加的例外功能
    从 JDK 7 开始,异常处理已扩展为三个新功能:自动资源管理、多重捕获和更准确的重新抛出。 多重catch允许您使用同一个catch子句捕获多个异常,避免代码重复。 要使用多重捕获,请指定由 | 分隔的异常列表。在 catch 子句中。每个参数都是隐式最终参数。 用法示例:catch(final...
    编程 发布于2024-11-06
  • 如何修复运行 ES6 代码时出现“意外的令牌导出”错误?
    如何修复运行 ES6 代码时出现“意外的令牌导出”错误?
    “排除意外的令牌导出错误”尝试在项目中执行 ES6 代码时,可能会出现“意外的令牌导出”错误。此错误表明所使用的环境不支持 ES6 模块中使用的导出关键字语法。错误详细信息以下代码片段举例说明了错误的来源: export class MyClass { constructor() { c...
    编程 发布于2024-11-06
  • 即使卸载后,VSCode 扩展也不会从文件系统中删除,我创建了一个解决方案!
    即使卸载后,VSCode 扩展也不会从文件系统中删除,我创建了一个解决方案!
    所以这是基于 vscode 的编辑器的问题。即使您卸载了扩展程序,它也会保留在文件系统中,并随着时间的推移堵塞您的系统。我创建了一个简单的解决方案。运行此 python 脚本将删除 vscode 上未安装的扩展。 它适用于 VS Code、VS Code Insiders,也适用于 VSCodiu...
    编程 发布于2024-11-06
  • 通过 GitHub Actions 按计划更新网站内容
    通过 GitHub Actions 按计划更新网站内容
    我想分享我构建一个自我可持续的内容管理系统的旅程,该系统不需要传统意义上的内容数据库。 问题 该网站的内容(博客文章和书签)存储在 Notion 数据库中: 带书签的数据库 –  Notion UI 我试图解决的问题是不必在添加每个书签后手动部署网站。最重要的是 - 保持托管尽可能便...
    编程 发布于2024-11-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3