问题描述
背景:
致力于将Cybersource信用卡与React应用集成。选中(onBlur
)字段后,需要显示来自API响应的屏蔽卡号。
流量
-
创建了一个容器div,在其中加载了iframe,然后输入了CC号。在
blur
事件中,执行API调用以进行验证并获取屏蔽的卡号(如果成功验证)。 -
在设置
maskedCardNumber
时,组件将重新呈现,并在container-div中显示maskedCardNumber。在这一点上,我在“元素”标签中看到,IFrame已经消失了。现在,在我的容器div中,没有IFrame,而是带掩码的卡号。
我想更改抄送号码
- 我点击 div相同的输入
解决方法
我在这里看到的问题基本上是由于iFrame的异步特性,在您加载setMaskedCardNumber()
调用后返回的响应。
尝试使用这种效果
useEffect(()=>{
if(maskedCardNumber === ""){
loadIFrame()
}
},[maskedCardNumber])
并从loadIFrame();
处理程序中删除onClick()
这将确保每当您清空cardNumber状态时,都会在成功清空iFrame时加载它。
更新:
我们可以使用单个useEffect
。
useEffect(() => {
if (apiKey && !maskedCardNumber) {
loadIFrame();
}
},[apiKey,maskedCardNumber])
这样,我们可以确保仅在apiKey存在时才加载IFrame,否则不要尝试加载,因为IFrame依赖于apiKey。