第三方脚本无法始终在反应组件中找到具有特定 ID 的按钮

Third Party script not consistently find button with certain id in react component

我正在创建一个包含第三方 (NMI) 的网络应用程序来收集付款信息。 NMI 提供的脚本完成了所有必须完成的工作,只需添加一个 ID 为 'payButton' 的 html 按钮,当单击该按钮时,会显示一个弹出窗口以收集 CC 信息。

以下是我能够让它工作的唯一情况。

<html lang="en">
  <head>

    <!-- Other imports -->

    <!--
      NMI Collect.js script
    -->
    <script src="https://secure.networkmerchants.com/token/Collect.js" data-tokenization-key="security_key"></script>

    <title>React App</title>
  </head>
  <body></body>
</html>
class App extends Component {

    render() {
        return (
            <div>
                <button type="button" id="payButton">Pay </button>
            </div>
        )
    }
}

现在上面的代码可以正常工作了。我可以单击该按钮,弹出窗口会像它应该的那样打开,但是当我想根据组件的状态隐藏或显示按钮时,弹出窗口无法工作。下面的代码是这种情况不起作用。

class App extends Component {

    render() {
        const test = false

        let data
        if(test) {
            data = <div></div>
        } else {
            data = <button type="button" id="payButton">Pay </button>
        }

        return (
            <div>
                {data}
            </div>
        )
    }
}

脚本很可能是在查找按钮并直接在其上添加侦听器。这意味着一旦某些状态发生变化会隐藏该按钮,该按钮就会从 DOM 中删除并且监听器也会随之丢失。

您需要检查 NMI​​ api 以查看您有哪些选项。如果有手动方式重新附加侦听器,您可以在组件更新并再次显示按钮时执行此操作。