我有应该呈现Paypal按钮的这段代码。
<Head>
<script src="https://www.paypal.com/sdk/js?client-id=KEY"></script>
</Head>
我将paypal按钮加载到componentDidMount方法中
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,这是因为调用componentDidMount方法时脚本未完全加载。 我如何才能等到脚本加载后才能正确显示按钮
答案 0 :(得分:1)
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 将标记它已准备就绪。在 useState 中跟踪它
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);
}
}, []);