我有一个用Modal组件呈现的Paypal按钮。在不引发清理错误的情况下卸载Paypal按钮的正确方法是什么?
这是对话框的实现
<Drawer anchor="bottom" open={open} onClose={() => setStatus(false)}>
<section className={classes.innerDrawer}>
<h2 className={classes.innerDrawerTitle}>
{loading ? '' : 'Checkout'}
</h2>
<PaypalButton
...props
/>
</section>
</Drawer>
和按钮
const Button = paypal.Button.driver('react', { React, ReactDOM });
return (
<Button
env={PAYPAL_ENV}
client={client}
payment={(data, actions) => payment(data, actions)}
onAuthorize={data => execute(data.payerID, data.paymentID)}
style={{
size: 'medium', // tiny, small, medium
color: 'blue', // orange, blue, silver
shape: 'rect', // pill, rect
}}
/>
);
我收到的错误消息:
未捕获的错误:窗口无响应-已清理
卸载成功后,我没有收到此错误消息,这种情况发生在我处理付款时。
链接:
答案 0 :(得分:0)
我无法重现您的问题,但我尝试执行与您相同的代码。
在此示例中,将PayPal按钮安装在Drawer元素中,该元素在单击按钮后安装。当您在抽屉外部的任何位置单击时,抽屉将被卸载。
class Modal extends React.Component {
constructor() {
super()
this.state = {
open: false
}
}
render () {
return (
<div>
<button onClick={() => this.setState({ open: true })}>Open Drawer</button>
{
this.state.open &&
<Drawer anchor="left" open={true} onClose={() => this.setState({ open: false })}>
<PayPalButton
commit={this.state.commit}
env={this.state.env}
client={this.state.client}
payment={(data, actions) => this.payment(data, actions) }
onAuthorize={(data, actions) => this.onAuthorize(data, actions)}
/>
</Drawer>
}
</div>
)
}
}