如何将SharpSpring表单嵌入React(page.jsx)组件并解决加载报错
错误原因
你遇到的报错是因为你直接将ss_form这个JS对象作为React子元素放在了JSX中,React本身不支持直接渲染普通对象,因此触发了类型错误。另外你直接在JSX中写的script标签也不会按照预期执行SharpSpring需要的初始化逻辑。
解决步骤
- 第一步:给表单要挂载的容器指定唯一的id,将
ss_form配置挂载到window对象上(SharpSpring的脚本会从全局作用域读取这个配置) - 第二步:在组件挂载完成后(用
useEffect钩子)动态创建script标签加载SharpSpring的表单脚本,确保脚本执行时配置已经存在 - 第三步:组件卸载时清理全局的
ss_form变量和注入的script标签,避免内存泄漏
完整实现代码
import React, { useEffect } from "react"; function MyComponent() { useEffect(() => { // 全局挂载SharpSpring需要的配置 window.ss_form = { account: 'MzawMDE3tzQzBQ', // 请替换为你自己的正确account值 formID: 'szBIMrFMSzbXTUm0TNM1MTc107VMNbfQTTRJTExOTUoySk4zAA', // 请替换为正确的formID width: '100%', domain: 'app-3QNK98WC9.marketingautomation.services', // 请替换为你自己的domain target_id: 'sharpspring-form-container', // 和下方容器的id对应 // 有需要可打开以下两个配置 // hidden: {'field_id': 'value'}, // polling: true }; // 动态创建script标签加载表单脚本 const script = document.createElement('script'); script.src = 'https://koi-3QNK98WC9.marketingautomation.services/client/form.js?ver=2.0.1'; // 请替换为你自己的脚本地址 script.type = 'text/javascript'; script.async = true; const formContainer = document.getElementById('sharpspring-form-container'); formContainer.appendChild(script); // 组件卸载时清理资源 return () => { delete window.ss_form; if (formContainer && script.parentNode === formContainer) { formContainer.removeChild(script); } }; }, []); return ( <main> {/* 表单挂载的目标容器 */} <div id="sharpspring-form-container" className="form"> </div> </main> ); } export default MyComponent;
注意事项
代码中的account、formID、domain以及脚本地址请替换为你自己SharpSpring后台提供的正确值,你之前的代码里这几个值和原始HTML里的不一致,需要确认正确性。该实现已经满足脚本放在head外部、表单容器内部的加载要求。
内容的提问来源于stack exchange,提问作者mdeotti
相关产品推荐
相关产品推荐

