问题描述
我一直在尝试在我的 Gatsby 站点上加载 Marketo 表单,并且我在 Stack Overflow 上找到了一些有关如何执行此操作的有用提示,但是在所有示例中,都有一个我似乎无法理解的问题来解决。
这是组件:
import React from 'react'
import useMarketo from '../../hooks/useMarketo'
export default function MarketoForm({ formId }) {
const baseUrl = '//XXX-XXX.marketo.com'
const munchkinId = 'XXX-XXX-XXX'
useMarketo(baseUrl,munchkinId,formId)
return <form id={`mktoForm_${formId}`} />
}
这是钩子:
import { useState,useEffect } from 'react'
function appendScript(baseUrl,setScriptLoaded) {
if (window.MktoForms2) return setScriptLoaded(true)
const script = document.createElement('script')
script.src = `${baseUrl}/js/forms2/js/forms2.min.js`
script.onload = () => (window.MktoForms2 ? setScriptLoaded(true) : null)
document.body.appendChild(script)
}
export default function useMarketo(baseUrl,formId) {
const [formIsLoaded,setFormIsLoaded] = useState(false)
const [scriptLoaded,setScriptLoaded] = useState(false)
useEffect(() => {
if (scriptLoaded && !formIsLoaded) {
const windowGlobal = typeof window !== 'undefined' && window
windowGlobal.MktoForms2.loadForm(baseUrl,formId).whenRendered(setFormIsLoaded(true))
return
}
appendScript(baseUrl,setScriptLoaded)
},[formIsLoaded,scriptLoaded,baseUrl,formId])
}
问题是如果我离开页面并快速返回,表单将加载多次。
Marketo Form appears many times
我不知道如何在 useEffect 函数中清理它。问题是 loadForm
函数还没有返回,当我离开页面然后返回时,它实际上得到了返回,然后发出另一个请求。
我似乎无法找到解决此使用状态或清理功能的方法。 AbortController() 看起来很有希望,但我也找不到解决方案。不过,这似乎应该很容易解决。我不是第一个遇到这个问题的人,因为它以前在这里以及 Marketo 论坛上出现过 - 但我还没有找到合适的解决方案。
提前感谢您的建议!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)