- 此问题在此处已有答案**:
The useState set method is not reflecting a change immediately(16个答案)
13小时前关门了。
有时候看起来最简单的东西都不起作用了。我向我的API发出GET请求来获取paypal_client_id,但是它没有及时更新。
import { useState } from 'react';
import axios from 'axios';
import { useEffect } from 'react';
const PayPalButton = ({ total, onPaymentSuccess, onPaymentError, disabled }) => {
const [paypalClient, setPayPalClient] = useState('test-id');
useEffect(() => {
const paypalkey = async () => {
const { data: clientId } = await axios.get('/api/config/paypal');
setPayPalClient(clientId);
console.log(paypalClient);
};
paypalkey();
}, []);
return (
<PayPalScriptProvider options={{ 'client-id': paypalClient }}>
<PayPalButtons
disabled={disabled}
forceReRender={[total()]}
createOrder={(data, actions) => {
return actions.order.create({
purchase_units: [
{
amount: {
value: total(),
},
},
],
});
}}
onApprove={(data, actions) => {
return actions.order.capture().then((details) => {
onPaymentSuccess(data);
});
}}
onError={(err) => {
onPaymentError();
}}
/>
</PayPalScriptProvider>
);
};
export default PayPalButton;
我以为我的useEffect钩子会及时提供paypal_client_id,但它不起作用。
API是工作,但请求贝宝做认证按钮是做它与'test-id',这证明我的关键是没有及时到达.
任何帮助都将不胜感激。
1条答案
按热度按时间xfb7svmp1#
useEffect
在第一次渲染时触发,因此客户端ID不在"正确的时间"是"正常的"。应该在渲染中加载以防止出现这种情况。
例如:
或者,您可以简单地将client-id存储在环境变量中