当前位置: 首页 > article >正文

揭秘 NextJS Script 组件

在这里插入图片描述

揭秘 NextJS Script 组件

Next.jsScript 组件是对原生 <script> 标签的增强封装,主要区别和优势如下:

  1. 自动优化加载策略(支持按需/延迟加载)
  2. 避免重复加载
  3. 内置性能优化(如预加载、回调钩子)
  4. 简化第三方脚本集成

src

指定外部脚本的 URL 的路径字符串

<Script src="https://www.google-analytics.com/analytics.js"/>

strategy

该属性用于控制脚本的加载策略,他有以下几种属性

afterInteractive

strategy 属性的默认值为:afterInteractive,表示在页面渲染成功后加载的脚本

<Script src="https://www.google-analytics.com/analytics.js" strategy="afterInteractive"
/>

beforeInteractive

在页面渲染成功前加载的脚本

lazyOnload

在页面渲染成功且所有脚本加载完成后触发

onLoad

当引入了第三方资源时,我们想在资源加载完毕后执行某些操作时,可以使用 onLoad 回调。它只会触发一次

<Scriptsrc="https://maps.googleapis.com/maps/api/js"onLoad={() => console.log("onLoad")}
/>

onReady

onReadyonLoad 类似,不同的是它会在每次路由切换时触发,而 onLoad 只会触发一次

<Scriptsrc="https://maps.googleapis.com/maps/api/js"onReady={() => console.log("onReady")}
/>

代码示例:

下面是一段示例演示两者的区别,首先会进入到 /aaa 页面,随后跳转到 /bbb 页面,此时两个页面的 onLoadonReady 都会被触发。在后续两个页面再进行跳转时,就只会触发 onReady

app/aaa/page.tsx

"use client"import Link from "next/link"
import Script from "next/script"export default () => {return (<><h1>AAA</h1><Scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"onLoad={() => console.log("onLoad AAA")}onReady={() => console.log("onReady AAA")}/><Link href="/bbb">Go to BBB</Link></>)
}

app/bbb/page.tsx

"use client"import Link from "next/link"
import Script from "next/script"export default () => {return (<><h1>BBB</h1><Scriptsrc="https://maps.googleapis.com/maps/api/js"onLoad={() => console.log("onLoad BBB")}onReady={() => console.log("onReady BBB")}/><Link href="/aaa">Go to AAA</Link></>)
}

控制台输出结果:

访问 /aaa
onLoad AAA
onReady AAA访问 /bbb
onLoad BBB
onReady BBB跳转到 /aaa
onReady AAA
跳转到 /bbb
onReady BBB

onError

在引入第三方资源加载失败时候触发 onError 回调

<Scriptsrc="https://example.com/script.js"onError={(e: Error) => {console.error('Script failed to load', e)}}
/>

,比例 「4:3」帮我生成一个文章封面

http://www.lryc.cn/news/2397289.html

相关文章:

  • 网络安全防御指南:全方位抵御暴力破解攻击
  • 【C++/Linux】TinyWebServer前置知识之IP协议详解
  • mac安装brew时macos无法信任ruby的解决方法
  • Codeforces Round 1028 (Div. 2)(A-D)
  • 记录一个梦,借助大语言模型图片生成
  • android binder(二)应用层编程实例
  • HTML 等价字符引用:系统化记忆指南
  • 【深度学习】17. 深度生成模型:DCGAN与Wasserstein GAN公式深度推导
  • Ubuntu终端性能监视工具
  • 设计模式——命令设计模式(行为型)
  • 鸿蒙OSUniApp智能商品展示实战:打造高性能的动态排序系统#三方框架 #Uniapp
  • 03 APP 自动化-定位元素工具元素定位
  • PABD 2025:大数据与智慧城市管理的融合之道
  • Golang持续集成与自动化测试和部署
  • 三套知识系统的实践比较:Notion、Confluence 与 Gitee Wiki
  • mysql离线安装教程
  • OpenGL 3D 编程
  • 基于FPGA的VGA显示文字和动态数字基础例程,进而动态显示数据,类似温湿度等
  • 力扣刷题Day 68:搜索插入位置(35)
  • NodeJS全栈WEB3面试题——P4Node.js后端集成 服务端设计
  • SQL进阶之旅 Day 12:分组聚合与HAVING高效应用
  • 深入剖析C#构造函数执行:基类调用、初始化顺序与访问控制
  • Java 大数据处理:使用 Hadoop 和 Spark 进行大规模数据处理
  • 使用Python绘制节日祝福——以端午节和儿童节为例
  • 探索大语言模型(LLM):参数量背后的“黄金公式”与Scaling Law的启示
  • Excel to JSON 插件 2.4.0 版本更新
  • 黑马点评后端笔记
  • C#项目07-二维数组的随机创建
  • 光伏功率预测 | LSTM多变量单步光伏功率预测(Matlab完整源码和数据)
  • 解锁 AI 大语言模型的“知识宝藏”:知识库的奥秘与优化之道