揭秘 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 回调。它只会触发一次

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

onReady

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

<Script
    src="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>

      <Script
        src="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>

      <Script
        src="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 回调

<Script
    src="https://example.com/script.js"
    onError={(e: Error) => {
      console.error('Script failed to load', e)
    }}
/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值