gpt4 book ai didi

javascript - 等待在 nextjs 页面加载 paypal 脚本

转载 作者:行者123 更新时间:2023-12-05 02:54:30 25 4
gpt4 key购买 nike

我有这段代码应该呈现 PayPal 按钮。

    <Head>
<script src="https://www.paypal.com/sdk/js?client-id=KEY"></script>
</Head>

我在 componentDidMount 方法中加载 PayPal 按钮

componentDidMount() {
paypal
.Buttons({
createOrder: (data, actions)=> {
return actions.order.create({
purchase_units: [{
amount: {
currency_code: "USD",
value: amount,
},
}],
});
},
onCancel: function(data){
//console.log(data)

},
onError: function(err){
console.log(err)
}
})
.render("#paypal");
}




<div id="paypal" className=""></div>

在第一个页面加载时,页面抛出一​​个错误,我猜 PayPal is not defined 我猜是因为调用 componentDidMount 方法时脚本没有完全加载。我如何才能等到脚本加载完毕才能正确呈现按钮?

最佳答案

const addPayPalScript = () => {
const script = document.createElement("script");
script.type = "text/javascript";
script.src = `https://www.paypal.com/sdk/js?client-id=${process.env.PAYPAL_CLIENT_ID}`;
// script.setAttribute("data-namespace", "paypal_sdk");

script.async = true;
script.onload = () => {
setSdkReady(true);
};
document.body.appendChild(script);
};

script.onload 将标记它已准备就绪。跟踪它的使用状态

   const [sdkReady, setSdkReady] = useState(false);

然后在 useEffect 或 componentDidMount 中调用 addPayPalScript。我使用 useEffect

useEffect(() => {
dispatch(orderDetailRequestStart(paramsId));

if (!window.paypal) {
addPayPalScript();
} else {
// flags that it is ready
setSdkReady(true);
}

}, []);

关于javascript - 等待在 nextjs 页面加载 paypal 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61778707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com