You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 15中如何引入并执行外部JavaScript脚本?

Next.js 15 引入外部JS脚本的正确方法

你的问题主要有两个原因:一是Script组件没有被放入组件返回的JSX中,导致脚本根本没加载;二是脚本执行时可能DOM元素还未生成,无法找到目标节点。以下是解决方法:

1. 修正Script组件的位置

必须将Script组件放在Home组件的return JSX结构内,否则Next.js不会渲染这个脚本标签:

import Image from "next/image";
import Script from "next/script";

export default function Home() {
  return (
    <>
      <div>
        <p id="myText"></p>
      </div>
      {/* 将Script组件移入返回的JSX中 */}
      <Script src="/components/script.js" strategy="afterInteractive" />
    </>
  );
}

2. 确保脚本在DOM就绪后执行

修改public/components/script.js,添加DOM加载完成的监听,避免因元素未生成导致的错误:

document.addEventListener('DOMContentLoaded', () => {
  const targetElement = document.getElementById('myText');
  if (targetElement) {
    targetElement.textContent = "Hello, this is a text";
  }
});

更可靠的方式:利用Script组件的onLoad回调

可以直接在组件内处理脚本加载后的逻辑,不需要修改外部脚本:

import Image from "next/image";
import Script from "next/script";

export default function Home() {
  const handleScriptLoaded = () => {
    const targetElement = document.getElementById('myText');
    if (targetElement) {
      targetElement.textContent = "Hello, this is a text";
    }
  };

  return (
    <>
      <div>
        <p id="myText"></p>
      </div>
      <Script 
        src="/components/script.js" 
        onLoad={handleScriptLoaded}
        strategy="afterInteractive"
      />
    </>
  );
}

替代方案:直接使用React的useEffect

如果脚本逻辑简单,完全可以不用外部JS文件,直接在组件内通过useEffect执行DOM操作,更符合React的开发习惯:

import { useEffect } from 'react';
import Image from "next/image";

export default function Home() {
  useEffect(() => {
    const targetElement = document.getElementById('myText');
    if (targetElement) {
      targetElement.textContent = "Hello, this is a text";
    }
  }, []); // 空依赖数组确保只在组件挂载后执行一次

  return (
    <>
      <div>
        <p id="myText"></p>
      </div>
    </>
  );
}

说明:strategy="afterInteractive"是Next.js推荐的脚本加载策略,会在页面交互就绪后加载脚本,平衡性能和执行时机。

内容的提问来源于stack exchange,提问作者SirGhazian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 21:53:19