You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

react-google-recaptcha v2调用reset后onChange失效持续加载问题

问题根因

react-google-recaptcha 组件内部封装了独立的reCAPTCHA实例状态,直接调用window.grecaptcha.reset()是全局重置操作,没有同步组件内部的事件绑定与实例缓存,会导致第二次点击时组件无法正常触发验证请求,出现无限加载的问题。

解决方案

1. 改用组件实例的reset方法

给ReCAPTCHA组件绑定ref,通过ref调用组件提供的reset方法,保证组件内部状态同步更新:

// 组件挂载时绑定ref
<ReCAPTCHA 
  ref={el => this.captchaRef = el}
  sitekey={KEY} 
  onChange={this.captchaOnChange} 
/>

表单提交完成后替换原有全局重置逻辑:

// 替换 window.grecaptcha.reset()
this.captchaRef.reset()

2. 清理多余的async修饰符

当前captchaOnChange函数内部没有异步操作,async修饰符属于冗余配置,可能导致状态更新时序异常,建议移除:

captchaOnChange = (value) => {
  this.setState({
    captchaValue: value,
    clicked: true,
  });
};

3. 同步重置相关状态

重置验证码的同时,同步清空业务侧存储的验证码相关状态,避免新旧状态冲突:

// 表单提交成功后执行
this.captchaRef.reset()
this.setState({
  captchaValue: '',
  clicked: false
})

4. 版本适配排查

如果上述操作后问题仍然存在,可升级react-google-recaptcha到最新稳定版,旧版本存在已知的实例状态同步缺陷。

内容的提问来源于stack exchange,提问作者sourav sankpal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:24:02