反应卸载贝宝按钮

时间:2019-02-16 03:16:03

标签: reactjs paypal

我有一个用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
      }}
    />
  );

我收到的错误消息:

  

未捕获的错误:窗口无响应-已清理

卸载成功后,我没有收到此错误消息,这种情况发生在我处理付款时。

链接:

https://codesandbox.io/s/r4zvkjm2kq

1 个答案:

答案 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>
       )
    }
  }

正在运行的演示:https://codepen.io/herodrigues/pen/gqQEgr