作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.< / div >< / div >
Ayyaz阿里
< / div >

Ayyaz阿里

< / div >
验证专家 在工程< / div >< / div >
8 的经验< / div >< / div >< / div >< / div >

Ayyaz is a full-stack developer, 创始人, 在各种反应和JavaScript框架方面拥有8年经验的首席技术官. 他在处理产品构建方面有着深厚的专业知识, 并开发了一个在线教育平台,为全球100多万名学生提供服务.

< / div >< / div >

专业知识

下一个.jsJavaScript< / div >< / div >

以前的角色

首席技术官< / div >< / div >< / div >< / div >< / div >< / div >< / div >< / div >< / div >
< / div >
< / div >
< / div >< / div >分享< / div >< / div >< / div >

下一个.js是 a lightning-fast 反应 这个框架受到Hulu和Netflix等数据密集型流媒体网站的信任. If you’re already versed in 反应, 您一定要了解这种日益流行的技术.

Though both 反应 和 下一个.Js帮助创建有效的web用户界面,它们有一些关键的区别: 下一个.js是 更多的 功能丰富的 和 opinionated than 反应. 它特别适合于网站专注于搜索引擎优化(搜索引擎优化)或 呈现前.

下一个.js和. 反应

反应于2013年首次亮相,比下一个更成熟.js. 但在2016年发布的更年轻的框架越来越受欢迎,有超过1000个 113K GitHub stars 截至2023年10月,每周数百万次 npm下载. Let’s see a basic 下一个.js和. 反应性能比较,当使用下一个时会崩溃.js和. 反应:

  • Development speed: 下一个.js提供了开箱即用的特性,简化了制作高级反应应用程序的开发过程. 在下一个中引入了自己的编译器.Js 12框架还提高了构建速度. Compared to 反应, 下一个.Js减少了工程师等待代码刷新所需的时间, 最大限度地减少开发人员的挫败感和速度减慢.
  • Data fetching 和 load times: 下一个.js可以遍历反应树并查询服务器中的数据,从而允许预加载页面数据. 这通常会降低由下一个提供服务的页面的应用程序加载时间.与用普通反应编写的页面相比.
  • Rendering 和 搜索引擎优化: 下一个.js提供预渲染,而反应使用客户端渲染. Pre-rendered 页面 enable effective 搜索引擎优化策略 这在一个普通的反应应用中是很难实现的.
  • 路由: 下一个.Js为路由提供了结构化的、预定义的文件系统. 与反应的各种库选项(如.g., 反应的路由器), but simplifies page setup 和 routing.

反应可以很好地服务于各种项目类型, including user dashboards, 后端系统, internal organization tools, 和 data visualization systems. 下一个.Js是用于增强的理想工具包 反应 applications 这得益于预渲染的力量, including e-commerce stores, social media apps, ticket-booking systems, 和 education platforms. 让我们更详细地探讨一下它的一些用例, so you can answer 的 question, “Should I use 下一个.js?”

Rendering in 下一个.js

渲染是将反应代码转换为HTML的过程,然后浏览器将其显示为页面的用户界面. 下一个.js提供了三种呈现方法——客户端呈现(CSR), server-side rendering (SSR), 和静态站点生成(SSG),以及额外的好处 incremental static regeneration (ISR). ISR将服务器端呈现与半静态缓存机制结合起来,减轻了服务器负载,并提供了与静态站点相似的速度.

服务器端呈现和静态站点生成属于预呈现的范畴, 其中HTML页面在发送到客户端之前生成. A great advantage of using 下一个.它为预渲染反应应用增加了强大的支持.

Client-side Rendering

客户端渲染是普通反应应用程序的默认方式. 该方法在客户端生成页面的HTML. 换句话说, 呈现工作在用户的浏览器中进行, 和来自用户设备的JavaScript生成HTML. UI在渲染完成后出现,此时网页也是交互式的.e., 水化).

CSR is possible for 下一个.js components using 反应’s useEffect or useSWR.

Server-side Rendering

下一个.js还支持在服务器上生成页面的HTML. 在这种情况下, 生成的HTML被发送到客户端,以便网页的UI在水化之前出现. 然后, 在客户端完成JavaScript初始化之后,可查看的网页就可以进行交互了.

On 页面 where we want 下一个.Js来执行服务器端呈现,有些简单 configuration functions are added to 的 page.

Static Site Generation

下一个.js also offers static site generation, 其中所有静态HTML页面都是在构建时由JavaScript呈现的. 与反应单页面应用程序相比,从反应代码库生成静态站点需要更多的前期构建时间. 然而, 这里的回报是拥有静态内容,这些内容可以以站点内容允许的最大速度提供和缓存,而不需要SSR的计算开销.

我们可以表演 下一页.js页面 that we want to generate statically with getStaticProps()getStaticPaths (),后者定义静态页面的路由.

下一个.js 搜索 Engine Optimization

下一个.Js的速度和预渲染网站所有页面的能力使搜索引擎能够快速轻松地抓取和索引网站, 改善搜索引擎优化. 搜索引擎优化对许多企业和网站来说是至关重要的,因为搜索引擎优化好的网站在搜索结果中会出现更高的位置. 用户更有可能点击排名较高的网站, 排名靠前的结果平均点击率为 27.6%,其点击率是第10个结果的点击率(2)的10倍.4%.

反应网站与大量的内容和结果 JavaScript代码 used for rendering—face 搜索引擎优化 challenges 当处理谷歌抓取和索引时.

的 ability of 下一个.js轻松执行服务器端渲染(SSR)不仅提高了搜索引擎优化排名, 但也提高了网站的感知和实际加载时间,以获得最佳的用户体验.

Getting Started With 下一个.js

现在我们来看看下一个的要点.js设置、路由、页面和导航,以便您可以获得预渲染和搜索引擎优化的好处. Before starting our 下一个.. Js教程,确保你有最新版本的 节点.js下载 在您的系统中. You can verify 的 节点.js version on your machine with 节点——版本.

的re are two ways to set up a 下一个.js项目:

  • 具有预定义配置的自动设置
  • 手工设置 和 configurations

我们将按照自动设置更容易地开始我们的项目. 的 create-next-app CLI工具管理自动设置,并使快速构建应用程序成为可能. 让我们用内置的下一个创建项目.js support for TypeScript, a strict syntactical superset ,以确保正确的类型结构:

npx create-next-app@latest --typescript

create-next-app 会询问您的应用程序的名称吗. 项目名称必须由小写字母组成,并使用连字符代替空格. For example, I’ve named my application next-js-tutorial. 安装完成后,您将在终端上看到一条成功提示.

在我们的新项目中,可以看到下一个.Js要求严格的文件结构系统:

  • 该网站的 页面风格 are organized into 的ir own 文件夹s.
  • APIs are stored in 的 页面/ api 文件夹.
  • 可公开获得的资产存放在 公共 文件夹.

File Structure for 下一个.js项目
< / div >

下一个.js Routing 和 Pages

下一个.js uses its file structure inside 的 页面 目录来定义应用程序路由.

We define all routes in 的 页面 文件夹. 默认的 页/索引.tsx 文件是应用程序的入口点,我们在这里定义自定义字体, application tracking codes, 和 o的r items requiring global access.

添加新路由有两种方法:

  • Add a file ending in .tsx 直接在 页面.
  • 添加一个 指数.tsx 按a new sub文件夹 of 页面 (指数 文件被自动路由到目录root).

Let’s examine a few concrete 下一个.js examples for routing. 我们将在本教程中实现一个简单的页面路由, 然后介绍嵌套路由和动态路由概念.

页面的路线

We can add a basic page route, such as 关于我们,用… 关于我们.tsx 文件:

| - - - - - -页面
| | - _app.tsx
- 关于我们.tsx
| | - API
| | -索引.tsx

或者我们可以用an 指数.tsx 按a 页面/关于我们 文件夹:

| - - - - - -页面
| | - _app.tsx
- 关于我们
|    | | -索引.tsx
| | - API
| | -索引.tsx

Go ahead 和 add 的 关于我们.tsx page route to your project.

import 风格 from '../风格/家.模块.css的

const 关于Us: 全心全意地 = () => {
  回报( 
    

关于我们 Example Page

) } export default 关于Us

当我们将它与下一个结合使用时,我们将看到页面路由的作用.js导航. For now, we’ll return a placeholder 全心全意地 带有标题字符串,这样导航就能正常工作.

嵌套的路线

嵌套的路线 允许在一个页面上重用和有选择地更新多个布局(例如, when a user clicks a URL, 您可能想要更新正文内容,但保留页眉和页脚布局).

| - - - - - -页面
| | - _app.tsx
| | - API
| | -索引.tsx
| | - 家长
|    |    |— 孩子.tsx

We define 的 nested route /父/子 与一个 家长 文件夹 和 a nested 孩子 文件夹或文件(我们的示例显示了一个文件).

动态路由

动态路由 允许布局响应实时变化的情况下,预定义的路径不够. Let’s say we want to create a /产品/[产品Id] 路线(我.e.,当单击产品时,展开其组件). 假设 产品Id 定义中的变量是否可访问 产品,我们可以通过创建一个 产品 文件夹 和 wrapping our 产品Id page in brackets:

| - - - - - -页面
| | - _app.tsx
| | - API
| | -索引.tsx
| | -产品
|    |    |— [产品Id].tsx

This way, a route like 产品/ testId will have its query parameters set (i.e., 产品Id 设为 testId).

Finally, it is also possible to combine routing techniques. 例如,我们可以创建嵌套的动态路由 页面/post/[postId]/[comment].tsx.

下一个.js导航

下一个.js uses its own custom Link components 而不是 在客户端页面之间导航时使用HTML标记来允许下一个.Js来优化导航和数据预取. Link operates similarly to 的 标签和用途 href as 的 route to be opened. 你必须使用 passHref 道具 强迫 Link 将它的路由值传递给子组件(例如.e., when using custom-styled components).

的 major benefit to using Link 而不是 当用户将鼠标悬停在链接上方或附近时,它会在后台预加载数据. 这使得内容更容易被客户端处理, delivering improved app performance. You may still use 的 下一个中的标签.当链接到应用程序外部的外部页面时.

从下一个链接到我们的关于我们页面.js project blueprint, open 的 页/索引.tsx 主应用程序文件. We’ll first import 的 Link 组件从 下一个/链接,然后在标题下面添加一个链接段落

组件:

Here's our example 关于我们 page

Now we can run our app using 的 NPM运行dev shell comm和, visit http://localhost:3000,并查看我们添加的文本和关于我们的页面 http://localhost:3000/About我们 (点击关于我们后返回的路线).

下一个.. js网站模板显示在“localhost:3000”,并在下面添加说明“欢迎来到下一步”.js!”: “Here’s our example 关于我们 page.”
< / div >

地址为“localhost:3000/ 关于 - Us”的网站显示“关于我们示例页”.”
< / div >

Supercharge Web Apps With 下一个.js

在为你的下一个网站选择框架之前,有很多因素需要考虑. 尽管下一个.js比反应更固执己见,更不灵活, 该框架为针对搜索引擎优化或预渲染功能的高级项目提供了出色的开箱即用功能. With 的 foundations of 下一个.在你的工具包中加入js,你可以让你的站点比普通的反应应用更有优势.

Toptal工程博客的编辑团队向 理查德·普罗金 查看本文中提供的代码示例和其他技术内容.

< / div >< / div >< / div >< / div >

Underst和ing 的 basics

  • 为什么使用下一个.js?

    下一个.js使构建某些web用户界面变得更容易,在反应的基础上添加功能. 它拥有强大的社区和文档, 并且在前端web开发人员中越来越受欢迎.

    < / div >< / div >
  • Is 反应 better than 下一个.js?

    No, 反应 is not better than 下一个.js. 开发人员应该根据最适合其项目和优先级的框架来选择框架. (专注于搜索引擎优化的网站可能会受益于下一个.例如,Js,因为它减少了应用程序的加载时间.)

    < / div >< / div >
  • 为什么是下一个 ?.js better than 反应?

    下一个.Js提供了更高的开发速度、更短的应用程序加载时间和预渲染功能.

    < / div >< / div >
  • What is 的 difference between 下一个.js和反应?

    下一个.js是一个添加了开箱即用功能的反应框架. 反应是一个常用的JavaScript库,用于构建交互式用户界面, especially for web apps.

    < / div >< / div >
  • What problems does 下一个.js解决?

    下一个.js提供预渲染,可以通过减少应用程序加载时间来提高搜索引擎优化性能.

    < / div >< / div >
  • 为什么选择反应 ?.js?

    反应不那么固执己见,而且比下一个更成熟.Js,为开发人员提供了更大的灵活性和广泛的资源.

    < / div >< / div >
  • Are 反应 和 反应.是一样的?

    是的,这两个术语指的是同一个JavaScript库.

    < / div >< / div >
  • 是下一个.是一个框架?

    是的,下一个.js是一个开源的基于react的框架.

    < / div >< / div >
< / div >< / div >

标签

< / div >< / div >< / div >< / div >
Hire a Toptal expert on this topic.< / div >现在雇佣< / div >< / div >
Ayyaz阿里
< / div >

Ayyaz阿里

验证专家 在工程< / div >< / div >
8 的经验< / div >< / div >

Lahore, Punjab, Pakistan

Member since October 6, 2021

< / div >< / div >< / div >

作者简介

Ayyaz is a full-stack developer, 创始人, 在各种反应和JavaScript框架方面拥有8年经验的首席技术官. 他在处理产品构建方面有着深厚的专业知识, 并开发了一个在线教育平台,为全球100多万名学生提供服务.

< / div >< / div >
作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.< / div >

专业知识

下一个.jsJavaScript< / div >< / div >

以前的角色

首席技术官< / div >< / div >
雇佣Ayyaz< / div >< / div >< / div >
< / div >< / div >
< / div >

< / div >
< / div >< / div >< / div >< / div >< / div >
< / div >< / div >
< / div >

World-class articles, delivered weekly.

< / div >

Subscription implies consent to our 隐私政策

< / div >< / div >< / div >< / div >
< / div >

World-class articles, delivered weekly.

< / div >

Subscription implies consent to our 隐私政策

< / div >< / div >< / div >< / div >< / div >< / div >< / div >

Toptal 开发人员

< / div >< / div >

加入总冠军® 社区.

聘请开发人员 or Apply as a Developer< / div >< / div >< / div >