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

如何在Next JS组件中嵌入HubSpot表单?新手求助

在Next.js App Router中嵌入HubSpot表单的正确方法

为什么直接在组件div里放嵌入代码不行?

HubSpot表单依赖外部脚本加载,直接在组件里写静态脚本,Next.js的渲染机制会导致脚本要么在DOM元素生成前执行(找不到目标容器),要么重复加载引发冲突,所以表单出不来。

具体实现步骤

1. 把组件改成客户端组件

因为要操作DOM和加载脚本,必须在component.jsx顶部加上'use client'指令(这是App Router里客户端组件的标识):

'use client';

import { useEffect } from 'react';

export default function HubSpotForm() {
  // 后续逻辑写这里
}

2. 用useEffect按需加载脚本并渲染表单

在组件内部用useEffect确保DOM挂载后再加载脚本,避免找不到目标元素:

'use client';

import { useEffect } from 'react';

export default function HubSpotForm() {
  useEffect(() => {
    // 替换成你的HubSpot门户ID和表单GUID(从HubSpot表单嵌入页面复制)
    const portalId = '你的门户ID';
    const formGuid = '你的表单GUID';
    const containerId = 'hubspot-form-container';

    // 创建并加载HubSpot表单脚本
    const script = document.createElement('script');
    script.src = 'https://js.hsforms.net/forms/v2.js';
    script.async = true;
    
    // 脚本加载完成后渲染表单
    script.onload = () => {
      if (window.hbspt) {
        window.hbspt.forms.create({
          portalId,
          formId: formGuid,
          target: `#${containerId}`
        });
      }
    };

    document.body.appendChild(script);

    // 清理函数:防止路由切换后重复加载脚本和表单
    return () => {
      document.body.removeChild(script);
      const container = document.getElementById(containerId);
      if (container) container.innerHTML = '';
    };
  }, []);

  // 表单的挂载容器
  return <div id="hubspot-form-container"></div>;
}

3. 在page.jsx中导入使用组件

直接在page.jsx(服务器组件)里导入这个客户端组件即可:

import HubSpotForm from '@/components/component.jsx';

export default function HomePage() {
  return (
    <div className="home-page">
      {/* 其他页面内容 */}
      <HubSpotForm />
    </div>
  );
}

常见错误排查

  • 漏加'use client':服务器组件不能用useEffect和操作DOM,必须声明为客户端组件。
  • ID/GUID填错:去HubSpot的表单嵌入页面复制准确的门户ID和表单GUID,别手动输错。
  • 脚本重复加载:清理函数一定要移除脚本和容器内容,避免路由切换后表单重复出现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:05:21