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

揭秘 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.xdnf.cn/news/770545.html

相关文章:

  • HealthBench医疗AI评估基准:技术路径与核心价值深度分析(上)
  • Redis-6.2.9 cluster集群部署和扩容缩容
  • Flask中secret_key设置解析
  • Spring Boot Starter 自动装配原理全解析:从概念到实践
  • 通用优势估计函数(GAE,Generalized Advantage Estimation)详解
  • unity开发棋牌游戏
  • 力扣第452场周赛
  • Matlab绘图
  • odoo17 windows server布署错误分析
  • Spark-TTS: AI语音合成的“变声大师“
  • 一种在SQL Server中传递多行数据的方法
  • 8.linux文件与文件夹内处理命令cp,mv,rm
  • 铁电液晶破局 VR/AR:10000PPI 重构元宇宙显示体验
  • word中如何快速调整全部表格大小
  • Deepseek给出的8255显示例程
  • [蓝桥杯]蚂蚁感冒
  • 基于Android的拼车系统的设计与实现
  • Android Activity启动模式面试题
  • 任务25:绘制全局时间线(TimeLine)
  • 【Pytorch学习笔记】模型模块07——hook实现Grad-CAM
  • Gartner《Emerging Patterns for Building LLM-Based AIAgents》学习心得
  • AI大数据模型如何与thingsboard物联网结合
  • 嵌入式学习笔记 - freeRTOS动态创建任务时传入的任务句柄参数
  • ERP管理系统:Java+Vue,含源码及文档,涵盖采购、销售、库存等业务,优化企业运营
  • 洛雪音乐+多种音源同步更新,附带安装教程 -【PC端/安卓端】音乐软件
  • PART 6 树莓派小车+QT (TCP控制)
  • 计算机科技笔记: 容错计算机设计05 n模冗余系统 其他复杂结构
  • 深入解析支撑向量机(SVM):原理、推导与实现
  • 【数据分析】第二章 Python基础
  • JUC并发编程(一)