從 'react' 匯入 React, {useState}; 從 '@stripe/react-stripe-js' 導入 {CardElement}; 從“@mui/material/styles”導入{styled}; 從“@mui/material”導入{Box, Stack, Typography}; 從“../../ezComponents/EzLoadingBtn/EzLoadingBtn”導入 EzLoadingBtn; 常量 CARD_ELEMENT_OPTIONS = { 風格: { 根據: { '顏色': '#32325d', 'fontFamily': ''Helvetica Neue', Helvetica, sans-serif', 'fontSmoothing': '抗鋸齒', '字體大小': '16px', '::佔位符': { 顏色:'#aab7c4', }, }, 無效的: { 顏色: '#fa755a', 圖示顏色: '#fa755a', }, }, }; const RootStyle = styled(Stack)(({主題}) => ({ 寬度:'400px', 內邊距:'50px 30px 30px 30px' })) 導出預設函數 CardInput({onSubmit}) { const [正在加載,setLoading] = useState(false); 返回 ( <根樣式>; <排版變體='span'>卡</排版> </堆疊> <CardElement選項={CARD_ELEMENT_OPTIONS}/> 儲存卡 </框> </根樣式> ); }</pre></p>
P粉7383463802023-09-06 00:22:54
DONE - 問題是,我曾經認為「包裝」整個應用程式
<Elements stripe={stripePromise}> <ThemeProvider> <App/> </ThemeProvider> </Elements>
足夠了,但事實並非如此。 關鍵在於不必將整個應用程式都包裝在Elements中,只需將要使用某些stripe元件(CardElement、PaymentElement等)的子元件包裝起來即可。
/*父组件*/ <Elements stripe={stripePromise} options={options}> <CardInput/> </Elements> /*子组件*/ export default function CardInput() { return ( <div> <PaymentElement/> </div> ); }
這樣你就準備好了。