首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向Gatsby/JSX添加Marketo表单

向Gatsby/JSX添加Marketo表单
EN

Stack Overflow用户
提问于 2019-07-09 05:55:36
回答 1查看 561关注 0票数 3

我正在尝试将一个Marketo表单添加到Gatsby站点中,但在脚本注入页面的顺序上遇到了问题。

当我尝试呈现下面的组件时,我得到了错误消息"ReferenceError: MktoForms2 is not defined“。

我尝试注释掉整个useEffect代码块,组件在没有表单的情况下可以很好地呈现在页面上。然后,当我将"MktoForms2.loadForm("//app-sj11.marketo.com","XXX-XXX-XXX",1608)“粘贴到控制台中时,表单就会按预期出现。

代码语言:javascript
复制
import React, { useEffect } from "react";
import Helmet from "react-helmet";

import "./form.scss";

const FormContactMkto = () => {
  useEffect(() => {
    MktoForms2.loadForm("//app-sj11.marketo.com", "XXX-XXX-XXX", 1608);
  }, []);

  return (
    <div>
      <Helmet>
        <script
          src="//app-sj11.marketo.com/js/forms2/js/forms2.min.js"
          type="text/javascript"
        />
      </Helmet>
      <form id="mktoForm_1608"></form>
    </div>
  );
};

export default FormContactMkto;

如何将此Marketo表单加载到Gatsby页面?任何帮助或建议,我们都非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-05-12 14:30:43

我已经为我的项目创建了一个简单的组件。也许这对你的情况会有用。

代码语言:javascript
复制
import React, { useState, useEffect } from 'react';

const marketoScriptId = 'mktoForms';

export default function MarketoForm({ formId }) {
  const [isLoaded, setIsLoaded] = useState(false);

  useEffect(() => {
    if (!document.getElementById(marketoScriptId)) {
      loadScript();
    } else {
      setIsLoaded(true);
    }
  }, []);

  useEffect(() => {
    isLoaded &&
      window.MktoForms2.loadForm(
        '//app-XX.marketo.com',
        'XXX-XXX-XXX',
        formId
      );
  }, [isLoaded, formId]);

  const loadScript = () => {
    var s = document.createElement('script');
    s.id = marketoScriptId;
    s.type = 'text/javascript';
    s.async = true;
    s.src = '//app-XX.marketo.com/js/forms2/js/forms2.min.js';
    s.onreadystatechange = function() {
      if (this.readyState === 'complete' || this.readyState === 'loaded') {
        setIsLoaded(true);
      }
    };
    s.onload = () => setIsLoaded(true);
    document.getElementsByTagName('head')[0].appendChild(s);
  };

  return (
    <div>
      <form id={`mktoForm_${formId}`}></form>
    </div>
  );
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56943000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档