ChargeBee Drop-in 结账 + 反应:错误

kin*_*ike 1 javascript reactjs

我正在尝试按照https://www.chargebee.com/checkout-portal-docs/drop-in-tutorial.html#implementation将插入式结帐添加到 react SPA 。我chargebee.js在视图的其余部分被渲染后动态添加,然后调用registerAgain().

componentDidMount() {
    const el = document.createElement('script');
    el.onload = () => {
        window.Chargebee.registerAgain();
        // this.setState({ chargebeeReady: true });
    };
    el.setAttribute('data-cb-site', 'derp-test');
    el.setAttribute('src', 'https://js.chargebee.com/v2/chargebee.js');
    document.body.appendChild(el);
}

render() {
    // [...]
    <a
        href="javascript:void(0)"
        data-cb-type="checkout"
        data-cb-plan-id="asdf-test"
    >
        Subscribe
    </a>
    // [...]
}
Run Code Online (Sandbox Code Playgroud)

单击时subscribe出现错误:

Uncaught TypeError: Cannot read property 'getCart' of null
    at t.a (event-binding.ts:24)
    at Function.value (chargebee.ts:46)
    at HTMLScriptElement.el.onload (Subscribe.js:23)
Run Code Online (Sandbox Code Playgroud)

kna*_*nat 7

Chargebee 实例将在 DOMContentLoaded 事件被触发时创建。由于您是异步加载它,因此不会创建实例。因此,您可以使用 Chargebee.init() 创建实例。

componentDidMount() {
    const el = document.createElement('script');
    el.onload = () => {
      window.Chargebee.init({
        "site": "derp-test"
      });
      window.Chargebee.registerAgain();
      // this.setState({ chargebeeReady: true });
    };
    el.setAttribute('src', 'https://js.chargebee.com/v2/chargebee.js');
    document.body.appendChild(el);
}
Run Code Online (Sandbox Code Playgroud)