【问题标题】:How to get a function inside a script tag in react JS?如何在 React JS 的脚本标签中获取函数?
【发布时间】:2021-11-15 22:51:00
【问题描述】:

我在 react js 中使用标签脚本有困难。我正在尝试使用在线支付 API。使用 API 的第一条指令是使用:

 <script src="https://assets.pagseguro.com.br/checkout-sdk-js/rc/dist/browser/pagseguro.min.js"></script>

根据API参考,下一步是:

  • 包含 JavaScript 后,您必须配置函数调用 PagSeguro.encryptCard(),在 publicKey 参数中传递您的公钥。
var card = PagSeguro.encryptCard({
  publicKey: "MY_PUBLIC_KEY",
  holder: "First name Last name",
  number: "4242424242424242",
  expMonth: "12",
  expYear: "2030",
  securityCode: "123"
});

var encrypted = card.encryptedCard;

我的问题是由于 PagSeguro.encryptCard() 部分造成的。 PagSeguro 未定义。如何提取脚本中的PagSeguroencryptCard()

我正在使用下面的代码:

import React, {useEffect, useState} from 'react'

function Pay(){   

  const  [Infor, setInfor]=useState();

     useEffect(() => {
        
        const script = document.createElement('script');
      
        script.src = 'https://assets.pagseguro.com.br/checkout-sdk-js/rc/dist/browser/pagseguro.min.js';
        script.async = true;
         script.onload = (function(){ 
        setInfor(script);
       }) 
        console.log('script',script)
       
      const container = document.getElementById("mydiv"); 
      container.appendChild(script); 
       
      let card = script.PagSeguro.encryptCard({
        publicKey: "MINHA_CHAVE_PUBLICA",
        holder: "Nome Sobrenome",
        number: "4242424242424242",
        expMonth: "12",
        expYear: "2030",
        securityCode: "123"
      });
       console.log('card',card)             
      }, []);

  
return (
    <div id="mydiv">
     
<h1>Payment</h1>

</div>
);

}
export default Pay

这是错误信息。 TypeError: Cannot read properties of undefined (reading 'encryptCard')

【问题讨论】:

  • 您在 DOM 中的何处包含该脚本以及您在何处尝试执行该代码 sn-p?
  • &lt;script&gt; 运行时,它会在window 上公开PagSeguro。这意味着您可以直接引用它,也可以使用window.PagSeguro 引用它
  • 我创建了一个名为 pay 的组件。我使用 useEffect 来尝试使用脚本。

标签: javascript reactjs tags payment script


【解决方案1】:

听起来您在代码之后 包含了外部脚本 - 正如您引用的 API 参考所说:

包括JavaScript之后你必须配置函数调用...

您需要您的代码如下所示:

<script src="https://assets.pagseguro.com.br/checkout-sdk-js/rc/dist/browser/pagseguro.min.js"></script>
<script>
// Now, PagSeguro will have loaded
console.log(typeof PagSeguro);

// and you can proceed to use it

var card = PagSeguro.encryptCard({
  publicKey: "MY_PUBLIC_KEY",
  holder: "First name Last name",
  number: "4242424242424242",
  expMonth: "12",
  expYear: "2030",
  securityCode: "123"
});

var encrypted = card.encryptedCard;
</script>

如果您不想在脚本下载时阻止渲染,您可以将load 事件侦听器附加到脚本,并为其指定asyncdefer 属性。

【讨论】:

  • 我不明白。我应该把这个想法放在 React 的什么地方?在名为 Pay 或 html(root) 的组件中?
  • 您需要做的就是在脚本的其余部分之前包含外部脚本首先,然后PagSeguro 对象将在您使用它时定义之后。 &lt;script src="https://assets.pagseguro.com.br/checkout-sdk-js/rc/dist/browser/pagseguro.min.js"&gt;&lt;/script&gt; &lt;script&gt;// rest of your script&lt;/script&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
相关资源
最近更新 更多