ChargeBee插入检出+ React:错误

时间:2018-07-12 09:10:41

标签: 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>
    // [...]
}

点击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)

1 个答案:

答案 0 :(得分:2)

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);
}