从 '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> ); }
这样你就准备好了。