在组件内使用脚本反应
Using a script inside component react
我正在尝试通过 js 脚本使用支付模式。我怀疑因为我将它安装在 root
div 上,所以它卸载了所有组件。我想有条件地加载它,以便用户可以取消它并稍后打开它。
const loadScript = function (src) {
var tag = document.createElement('script');
tag.async = false;
tag.src = src;
document.getElementById('something').appendChild(tag)
}
useEffect(() => {
loadScript('https://checkout.reepay.com/checkout.js')
reepay.getId().then(data => {
setReepayId(data.reepay.id)
})
}, []);
const loadReepay = () => {
return new window.Reepay.ModalCheckout(reepayId)
}
//how I am mounting it
{isPaying ? loadReepay() : <> </>}
我尝试过使用 HOC 库,但我在有条件地加载它时遇到了问题,但它确实安装在了正确的组件上。我也尝试将它安装在组件 document.getElementById('element-id-inside-component').appendChild(tag)
内的一个元素上,但它仍然安装在 root 上并卸载我的所有组件。所以我认为这是因为它是在 window new window.Reepay.ModalCheckout(reepayId)
.
上实例化的
这是一个说明问题的代码框:
https://codesandbox.io/s/hidden-thunder-3h5vj?file=/src/App.js:0-1070
编辑
显然脚本没有 return JSX...
const loadReepay = () => {
new window.Reepay.ModalCheckout(reepayId)
}
成功了,如果有人可以为前来的人提供答案,那么我会将其标记为已回答并投赞成票。
脚本没有 return JSX,这就是为什么我无法在组件渲染中渲染它。所以我不必 returning 函数,只需调用构造函数 new window.Reepay.ModalCheckout(reepayId)
.
const loadScript = function (src) {
const element = document.createElement('script');
element.async = false;
element.src = src;
document.body.appendChild(element)
}
useEffect(() => {
loadScript('https://checkout.reepay.com/checkout.js')
reepay.getId().then(data => {
setReepayId(data.reepay.id)
})
}, []);
const loadReepay = () => {
const rp = new window.Reepay.ModalCheckout(reepayId)
rp.addEventHandler(window.Reepay.Event.Cancel, function (data) {
setIsPaying(false)
});
}
我正在尝试通过 js 脚本使用支付模式。我怀疑因为我将它安装在 root
div 上,所以它卸载了所有组件。我想有条件地加载它,以便用户可以取消它并稍后打开它。
const loadScript = function (src) {
var tag = document.createElement('script');
tag.async = false;
tag.src = src;
document.getElementById('something').appendChild(tag)
}
useEffect(() => {
loadScript('https://checkout.reepay.com/checkout.js')
reepay.getId().then(data => {
setReepayId(data.reepay.id)
})
}, []);
const loadReepay = () => {
return new window.Reepay.ModalCheckout(reepayId)
}
//how I am mounting it
{isPaying ? loadReepay() : <> </>}
我尝试过使用 HOC 库,但我在有条件地加载它时遇到了问题,但它确实安装在了正确的组件上。我也尝试将它安装在组件 document.getElementById('element-id-inside-component').appendChild(tag)
内的一个元素上,但它仍然安装在 root 上并卸载我的所有组件。所以我认为这是因为它是在 window new window.Reepay.ModalCheckout(reepayId)
.
这是一个说明问题的代码框: https://codesandbox.io/s/hidden-thunder-3h5vj?file=/src/App.js:0-1070
编辑 显然脚本没有 return JSX...
const loadReepay = () => {
new window.Reepay.ModalCheckout(reepayId)
}
成功了,如果有人可以为前来的人提供答案,那么我会将其标记为已回答并投赞成票。
脚本没有 return JSX,这就是为什么我无法在组件渲染中渲染它。所以我不必 returning 函数,只需调用构造函数 new window.Reepay.ModalCheckout(reepayId)
.
const loadScript = function (src) {
const element = document.createElement('script');
element.async = false;
element.src = src;
document.body.appendChild(element)
}
useEffect(() => {
loadScript('https://checkout.reepay.com/checkout.js')
reepay.getId().then(data => {
setReepayId(data.reepay.id)
})
}, []);
const loadReepay = () => {
const rp = new window.Reepay.ModalCheckout(reepayId)
rp.addEventHandler(window.Reepay.Event.Cancel, function (data) {
setIsPaying(false)
});
}