Next.js - Pages and Layouts

news2024/12/30 4:10:46

Pages

页面是路由独有的用户界面。你可以通过从 page.js 文件导出组件来定义页面。使用嵌套文件夹定义路由,并使用 page.js 文件公开访问路由。

// `app/page.tsx` is the UI for the `/` URL
export default function Page() {
  return <h1>Hello, Home page!</h1>
}
// `app/dashboard/page.tsx` is the UI for the `/dashboard` URL
export default function Page() {
  return <h1>Hello, Dashboard Page!</h1>
}

注意:

  1. 页面总是路由子树的叶子。
  2. 页面可以使用 .js、.jsx 或 .tsx 文件扩展名。
  3. 公开访问路由段需要有一个 page.js 文件。
  4. 页面默认为服务器组件,但也可设置为客户端组件。
  5. 页面可以获取数据。

Layouts

layouts是多个页面共享的用户界面。在导航时,布局会保留状态,保持交互性,并且不会重新渲染。布局还可以嵌套。

你可以通过从 layout.js 文件中导出一个 React 组件来定义布局。该组件应接受一个 children prop,该 prop 将在呈现时填充子布局(如果存在)或子页面。

layout.js special file

// app/dashboard/layout.tsx
export default function DashboardLayout({
  children, // will be a page or nested layout
}: {
  children: React.ReactNode
}) {
  return (
    <section>
      {/* Include shared UI here e.g. a header or sidebar */}
      <nav></nav>
 
      {children}
    </section>
  )
}

注意:

  1. 最顶部的布局称为根布局。应用程序中的所有页面都需要共享这一布局。根布局必须包含 html 和 body 标记。
  2. 任何路由段都可以选择定义自己的布局。这些布局将在该段的所有页面中共享。
  3. 默认情况下,路由中的布局是嵌套的。每个父布局都会使用 React children prop 封装其下方的子布局。
  4. 您可以使用路由组(Route Groups)将特定路由段选入或选出共享布局。
  5. 布局默认为服务器组件,但也可以设置为客户端组件。
  6. 布局可以获取数据。
  7. 父布局与其子布局之间无法传递数据。不过,您可以在路由中多次获取相同的数据,React 会自动对请求进行去重处理,而不会影响性能。
  8. 布局无法访问当前路由段。要访问路由段,您可以在客户端组件中使用 useSelectedLayoutSegment 或 useSelectedLayoutSegments。
  9. 布局可以使用 .js、.jsx 或 .tsx 文件扩展名。
  10. layout.js 和 page.js 文件可定义在同一文件夹中。layout将封装页面。

Root Layout (Required) (根布局)

根布局定义在应用程序目录的顶层,适用于所有路由。通过该布局,您可以修改从服务器返回的初始 HTML。

// app/layouts.tsx
export default function RootLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <html lang="en">
      <body>{children}</body>
    </html>
  )
}

注意:

  1. 应用程序目录必须包含一个根布局。
  2. 根布局必须定义 <html> 和 <body> 标记,因为 Next.js 不会自动创建它们。
  3. 您可以使用内置的 SEO 支持来管理 <head> HTML 元素,例如 <title> 元素。
  4. 你可以使用路由组创建多个根布局。请看这里的示例。
  5. 根布局默认为服务器组件,不能设置为客户端组件。

Nesting Layouts (嵌套布局)

在文件夹(如 app/dashboard/layout.tsx)内定义的布局适用于特定的路由段(如 jdy.com/dashboard),并在这些段处于活动状态时呈现。默认情况下,文件层次结构中的布局是嵌套的,这意味着它们会通过子布局道具将子布局包裹起来。

// app/dashboard/layout.tsx
export default function DashboardLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return <section>{children}</section>
}

 注意: 

  • Only the root layout can contain <html> and <body> tags. (只有根布局才有html 和body 标签)
  • 如果要将上述两种布局结合起来,根布局(app/layout.js)将包裹仪表盘布局(app/dashboard/layout.js),而仪表盘布局将包裹 app/dashboard/* 内的路由段。

Modifying <head> (修改标题)

在应用程序目录中,您可以使用内置的搜索引擎优化支持修改 <head> HTML 元素,如标题和元数据。
元数据可通过在 layout.js 或 page.js 文件中导出元数据对象或生成元数据函数来定义。(meatData)

// app/page.tsx

import { Metadata } from 'next'
 
export const metadata: Metadata = {
  title: 'Next.js',
  description: 'welcome to next.js'
}
 
export default function Page() {
  return '...'
}

注意:

  • 不应在根布局中手动添加 <title> 和 <meta> 等 <head> 标记。相反,您应该使用元数据 API,它可以自动处理高级需求,如流式处理和删除重复的 <head> 元素。
  • 详细请了解  generateMetadata | Next.js

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/890435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python爬虫7:实战1

python爬虫7&#xff1a;实战1 前言 ​ python实现网络爬虫非常简单&#xff0c;只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点&#xff0c;方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论&#xff0c;并不会对网站产生不好…

QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库

QT学习笔记-Linux ARM环境下实现QT程序通过ODBC驱动访问SQLServer数据库 0、背景1、基本环境2、搭建交叉编译环境3、在交叉编译服务器上交叉编译安装unixODBC3.1 下载unixODBC3.2 交叉编译unixODBC3.2.1 基本编译说明3.2.2 交叉编译说明3.2.3 ./configure -build,-host,-target…

iTOP-RK3399开发板开发板作为客户端- ssh使用

默认使用本地用户为远程登录时的用户&#xff1b;远程连接虚拟机里面的 Ubuntu&#xff08;IP 地址为 192.168.1.20&#xff09;&#xff0c; 如下图所示&#xff1a; ssh 192.168.1.20 以指定用户身份连接至服务器,输入以下命令&#xff1a; 输入 exit 退出 ssh 登录。 更多…

基础设施SIG月度动态:龙蜥大讲堂 - 基础设施系列专题分享火热进行中(7~8 月上旬持续分享),敬请关注!

基础设施 SIG&#xff08;OpenAnolis Infra SIG&#xff09;目标&#xff1a;负责 OpenAnolis 社区基础设施工程平台的建设&#xff0c;包括官网、Bugzilla、Maillist、ABS、ANAS、CI 门禁以及社区 DevOps 相关的研发工程系统。 01 SIG 整体进展 1、龙蜥大讲堂 - 基础设施系…

Vue3和Vue2对比学习之全局 API 应用实例

文章目录 0.前言1.参考文档2.详细说明2.1 全局 API 应用实例 非兼容2.2 一个新的全局 API&#xff1a;createAppconfig.productionTip 移除config.ignoredElements 替换为 config.isCustomElementVue.prototype 替换为 config.globalPropertiesVue.extend 移除类型推断组件继承…

最新年轻人副业赚钱攻略

最近几年&#xff0c;随着互联网的快速发展和社会变革的加速&#xff0c;年轻人副业赚钱的需求也越来越大。无论是为了增加收入、提升个人能力还是实现自我价值&#xff0c;年轻人们都纷纷开始寻找副业赚钱的机会。 那么&#xff0c;如何才能在副业赚钱中脱颖而出呢&#xff1…

软考笔记——10.项目管理

进度管理 进度管理就是采用科学的方法&#xff0c;确定进度目标&#xff0c;编制进度计划和资源供应计划&#xff0c;进行进度控制&#xff0c;在与质量、成本目标协调的基础上&#xff0c;实现工期目标。 具体来说&#xff0c;包括以下过程&#xff1a; (1) 活动定义&#…

Appium-移动端自动测试框架,如何入门?

Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门&#xff0c;那么我们就直奔主题。文章结构如下&#xff1a; 1、为什么要使用Appium&#xff1f; 2、如何搭建Appium工具环境?(超详细&#xff09; 3、通过demo演示Appium的使用 4、Appium如何…

PD协议受电端芯片是什么?——浅谈快充协议在Hi003/XSP16应用

PD协议的全称是USB Power Delivery协议&#xff0c;该协议是基于USB 3.1中的Type-C接口&#xff0c;所以一般使用Type-C接口的充电器都有PD协议。 目前充电器常见的USB-PD功率为&#xff1a;5V3A&#xff08;15W&#xff09;、9V2A&#xff08;18W&#xff09;、12V3A&#xf…

扩散模型实战(四):从零构建扩散模型

推荐阅读列表&#xff1a; 扩散模型实战&#xff08;一&#xff09;&#xff1a;基本原理介绍 扩散模型实战&#xff08;二&#xff09;&#xff1a;扩散模型的发展 扩散模型实战&#xff08;三&#xff09;&#xff1a;扩散模型的应用 本文以MNIST数据集为例&#xff0c;从…

【Linux】POSIX信号量和基于环形队列的生产消费者模型

目录 写在前面的话 什么是POSIX信号量 POSIX信号量的使用 基于环形队列的生产消费者模型 写在前面的话 本文章主要先介绍POSIX信号量&#xff0c;以及一些接口的使用&#xff0c;然后再编码设计一个基于环形队列的生产消费者模型来使用这些接口。 讲解POSIX信号量时&#x…

阿里云服务器镜像大全_Linux和Windows操作系统清单

阿里云服务器操作系统大全&#xff0c;阿里云提供的镜像均为正版授权&#xff0c;正版镜像可以在云服务器ECS上运行的应用程序提供安全、稳定的运行环境系统&#xff0c;阿里云服务器以公共镜像为例分享阿里云服务器操作系统大全&#xff0c;包括Alibaba Cloud Linux镜像、Linu…

洁净室气流流型分类、检测及相关法规要求概览

洁净室气流形式可以分为单向流或非单向流两种。如果综合利用两种气流&#xff0c;通常叫做混合气流。单向流可以是垂直的或水平的。两种单向流都以最终过滤的送风和回风入口&#xff0c;它们几乎是相对设置&#xff0c;这样才能使气流的流动形式保持尽可能的呈直线状。确认气流…

java全局捕捉异常并返回统一返回值

1. 首先定义全局异常处理类 import org.springframework.validation.BindException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.…

vcsa6.7 vsan超融合,虚拟机突然识别不到加密狗

问题现象&#xff1a; vcsa6.7 vsan超融合&#xff0c;虚拟机突然识别不到加密狗&#xff0c;加密狗直通给虚拟机&#xff0c;打开设备管理器&#xff0c;有未知的usb设备&#xff0c;重启虚拟机&#xff0c;卸载tools&#xff0c;重新安装tools&#xff0c;都不行 问题解决…

面向对象编程(OOP):Python中的抽象与封装

文章目录 &#x1f340;引言&#x1f340; 类与对象&#x1f340;封装&#x1f340;继承&#x1f340;多态&#x1f340;面向对象编程的优势&#x1f340;使用面向对象编程的场景&#x1f340;实例化与构造函数&#x1f340; 成员属性和类属性&#x1f340;魔术方法&#x1f34…

opencv基础:几个常用窗口方法

开始说了一些opencv中的一些常用方法。 namedWindow方法 在OpenCV中&#xff0c;namedWindow函数用于创建一个窗口&#xff0c;并给它指定一个名字。这个函数的基本语法如下&#xff1a; import cv2cv2.namedWindow(窗口名称, 标识 )窗口名称&#xff1a;其实窗口名称&…

SqlServer Management工具格式化代码、美化SQL

1、下载simple but powerful SQL formatter 插件下载地址&#xff1a;地址 2、安装 点击next—> finish 3、重新打开SqlServer Management即可看到 SQL Beautifier 点击Format ALL SQL 或者选中sql点击Format Selected SQL即可

Linux的基本权限(文件,目录)

文章目录 前言一、Linux权限的概念二、Linux权限管理 1.文件访问者分类2.文件类型和访问类型3.文件访问权限的相关设置方法三、目录的权限四、权限的总结 前言 Linux下一切皆文件&#xff0c;指令的本质就是可执行文件&#xff0c;直接安装到了系统的某种路径下 一、Linux权限的…

交换实验一

题目 交换机上接口配置 SW1 interface GigabitEthernet0/0/1 port hybrid tagged vlan 2 port hybrid untagged vlan 3 to 6 interface Ethernet0/0/2 port hybrid pvid vlan 3 port hybrid untagged vlan 2 to 6 interface Ethernet0/0/3 port link-type access port d…