【Next】动态路由、加载 UI 和流式传输

动态路由

动态段作为 params 属性传递给 layoutpageroute 和 generateMetadata 函数。
/app/blog/[slug]/page.tsx

export default function Page({params}: {params:{slug:string}}) {return <h1>Slug Page -- {params.slug}</h1>
};

image.png

/app/shop/[...slug]/page.tsx

export default function Page({params}: {params:{slug:string}}) {return <h1>Catch All Slug Page -- {params.slug}</h1>
};

image.png

image.png

[...slug][[...slug]] 不能放在同一目录下。而且他们用法相似。

catch-all 和 option-catch-all 的区别在于,如果带可选参数,不带参数的路由也会被匹配(上例中的 /shop)。

image.png

generateStaticParams 功能可以在构建时与 动态路线段 至 静态生成 路由结合使用,而不是在请求时按需使用。

export async function generateStaticParams() {const posts = await fetch('https://.../posts').then((res) => res.json())return posts.map((post) => ({slug: post.slug,}))
}

如果使用 fetch 请求在 generateStaticParams 函数内获取内容,则请求为 自动记忆。 这意味着跨多个 generateStaticParams、布局和页面具有相同参数的 fetch 请求只会发出一次,从而减少构建时间。

加载 UI 和流式传输

在加载路线段内容时显示来自服务器的 即时加载状态。 渲染完成后,新内容会自动换入。

下面的 loading.tsx 是预渲染加载指示器。例如骨架和旋转器,或未来屏幕的一小部分但有意义的部分,例如封面照片、标题等。这有助于用户了解应用正在响应,并提供更好的用户体验。

Suspense 的流式使得页面的某些部分能够更快地显示,而无需等待所有数据加载后才能渲染任何 UI。

当你想要防止长数据请求阻止页面渲染时,流式处理特别有用,因为它可以减少 第一个字节的时间 (TTFB) 和 首次内容绘制 (FCP)。 它还有助于提高 互动时间 (TTI),尤其是在速度较慢的设备上。

/app/loading.tsx

export default function Loading() {return (<><div className={"text-2xl text-yellow-700"}>Loading...</div></>)
};

/app/layout.tsx

import type { Metadata } from "next";
import { Inter } from "next/font/google";
import "./globals.css";
import {Suspense} from "react";
import Loading from "@/app/loading";const inter = Inter({ subsets: ["latin"] });export const metadata: Metadata = {title: "Create Next App",description: "Generated by create next app",
};export default function RootLayout({children,
}: Readonly<{children: React.ReactNode;
}>) {return (<html lang="en"><body className={inter.className}><Suspense fallback={<Loading />}>RootLayout{children}</Suspense></body></html>);
}

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

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

相关文章

(vue)el-select选择框加全选/清空/反选

(vue)el-select选择框加全选/清空/反选 <el-form-item label"批次"><el-selectv-model"formInline.processBatch"multiplecollapse-tagsfilterableplaceholder"请选择"style"width: 250px"no-data-text"请先选择企业、日…

常用的启发式算法有哪些

常用的启发式算法主要包括模拟退火算法&#xff08;SA&#xff09;、蚁群算法&#xff08;ACO&#xff09;、粒子群算法&#xff08;PSO&#xff09;、遗传算法&#xff08;GA&#xff09;、禁忌搜索算法&#xff08;TS&#xff09;以及超启发式算法&#xff08;Hyper-Heuristi…

Java使用documents4j将word和excel转pdf

pom.xml添加documents4j依赖 <!-- documents4j --> <dependency><groupId>com.documents4j</groupId><artifactId>documents4j-local</artifactId><version>1.0.3</version> </dependency> <!-- documents4j 转 wor…

《Kubernetes部署篇:基于Kylin V10+ARM架构CPU+外部etcd使用containerd部署K8S 1.26.15容器版集群(一主多从)》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;企业级K8s集群运维实战 1、在当前实验环境中安装K8S1.25.14版本&#xff0c;出现了一个问题&#xff0c;就是在pod中访问百度网站&#xff0c;大…

Java基础知识总结(59)

&#xff08;1&#xff09;Set集合 Set也是集合中的一个容器&#xff0c;程序可以依次把若干个对象放进Set&#xff0c;但是Set无法保存元素添加的顺序&#xff0c; Set不允许包含相同的元素&#xff0c;如果把两个相同的元素加入同一个Set中&#xff0c;则添加失败&#xff0…

Openlayers动态刷新Arcgis MapServer服务图层

Openlayers动态刷新Arcgis MapServer服务图层 最近做一个图层编辑的功能&#xff0c;在前端新增一个图块之后需要刷新Arcgis切片服务&#xff0c;实时显示效果。刚开始使用source的refresh方法&#xff0c;结果不生效&#xff0c;后来在source上更新一个时间戳参数实现了刷新切…

UTS iOS插件

1、UTS插件无法出现 再uniapp x中使用时&#xff0c;必须给这个插件高度和宽度&#xff0c;否则出不来&#xff01; <uts-hello-view buttonText"点击按钮内容" style"width:375px;height: 375px;background-color: aqua;"></uts-hello-view>…

python后端相关知识点汇总(十二)

python知识点汇总十二 1、什么是 C/S 和 B/S 架构2、count(1)、count(*)、count(列名)有啥区别&#xff1f;3、如何使用线程池3.1、为什么使用线程池&#xff1f; 4、MySQL 数据库备份命令5、supervisor和Gunicorn6、python项目部署6.1、entrypoint.sh制作6.2、Dockerfile制作6…

vue 的报告页面,生成pdf,使用html2canvas , 下载pdf格式文件。多页分页下载

1. 新建一个js 文件 &#xff0c; 命名 为 html2canvas.js ,html2canvas 文件和jspdf.min.js 放同一目录下。下载文件已上传啦 2. 在vue 文件中引入html2canvas.js 文件 <script>import * as html2Canvas from ./html2canvas.js </script> 3 点击下载&#xff…

oracle insert操作分批量提交

对临时表做insert插入时没有做批量提交&#xff0c;可能会导致undo表空间撑爆&#xff0c;修改脚本对插数进行2万一次的批量提交&#xff0c;并且修改索引和同义词创建时间在插数操作结束后。 原语句&#xff1a; insert into 目标表 select * from 源表;改为2w次一提交&…

OpenCV基本图像处理操作(十)——图像特征harris角点

角点 角点是图像中的一个特征点&#xff0c;指的是两条边缘交叉的点&#xff0c;这样的点在图像中通常表示一个显著的几角。在计算机视觉和图像处理中&#xff0c;角点是重要的特征&#xff0c;因为它们通常是图像中信息丰富的区域&#xff0c;可以用于图像分析、对象识别、3D…

探索人工智能在医疗领域的革命性应用

人工智能&#xff08;AI&#xff09;正在全球范围内逐步改变医疗行业的面貌&#xff0c;从提高诊断精度到优化治疗方案&#xff0c;AI技术正成为医疗创新的核心驱动力。本文将深入探讨AI在医疗领域的应用&#xff0c;并通过一个具体的Python代码示例&#xff0c;展示如何利用机…

30天算法挑战赛,一天一个算法(第一天,二分查找)

二分查找 1. 板子 int left 0; int right n - 1; while (left < right) {int mid (right - left) / 2 left;if (nums[mid] < target) {left mid 1;} else {right mid - 1;}return left; }2. 应用题 1. 查找题单 在排序数组中查找元素的第一个和最后一个位置 搜…

JavaIO操作-File

1、File类 1.1 File类说明 存储在变量,数组和对象中的数据是暂时的,当程序终止时他们就会丢失.为了能够永 久的保存程序中创建的数据,需要将他们存储到硬盘或光盘的文件中.这些文件可以移动,传送,亦可以被其他程序使用.由于数据存储在文件中,所以我们需要学习一个和文件有密…

openharmony 编译源码及docker相关操作

目录 一、环境搭建: 二、编译链下载及相关配置 三、编译及版本烧录 一、环境搭建: 1、拉取docker镜像,openharmony。默认版本为ubuntu 18.04

DDoS攻击愈演愈烈,谈如何做好DDoS防御

DDoS攻击是目前最常见的网络攻击方式之一&#xff0c;各种规模的企业包括组织机构都在受其影响。对于未受保护的企业来讲&#xff0c;每次DDoS攻击的平均成本为20万美元。可见&#xff0c;我们显然需要开展更多的DDoS防御工作。除考虑如何规避已发生的攻击外&#xff0c;更重要…

【LeetCode热题100】【动态规划】零钱兑换

题目链接&#xff1a;322. 零钱兑换 - 力扣&#xff08;LeetCode&#xff09; 要拿硬币凑钱&#xff0c;硬币无限多&#xff0c;就是完全背包问题&#xff0c;定义dp[i]是要凑的钱i的硬币数&#xff0c;对于当前硬币来说&#xff0c;如果选择了这个硬币&#xff0c;要么要凑的…

【机器学习300问】72、神经网络的隐藏层数量和各层神经元节点数如何影响模型的表现?

评估深度学习的模型的性能依旧可以用偏差和方差来衡量。它们反映了模型在预测过程中与理想情况的偏离程度&#xff0c;以及模型对数据扰动的敏感性。我们简单回顾一下什么是模型的偏差和方差&#xff1f; 一、深度学习模型的偏差和方差 偏差&#xff1a;衡量模型预测结果的期望…

K8s的亲和、反亲和、污点、容忍

1 亲和与反亲和 亲和性的原理其实很简单&#xff0c;主要利用label标签结合nodeSelector选择器来实现 1.1 Pod和Node 从pod出发&#xff0c;可以分成亲和性和反亲和性&#xff0c;分别对应podAffinity和podAntiAffinity。从node出发&#xff0c;也可以分成亲和性和反亲和性&…

优雅的CPP——结构化绑定

C17 引入了结构化绑定&#xff08;Structured Binding&#xff09;这一强大的特性&#xff0c;它提供了一种简洁的语法&#xff0c;用于从容器、元组、数组等数据结构中解包并绑定其元素到多个变量中。结构化绑定不仅可以提高代码的可读性和简洁性&#xff0c;还能使代码更加灵…