首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React google-recaptcha "ref“类型错误在ref类型记录中

React google-recaptcha "ref“类型错误在ref类型记录中
EN

Stack Overflow用户
提问于 2021-05-04 13:31:09
回答 2查看 3.9K关注 0票数 4

我正在尝试从reCaptcha类型的脚本项目中实现不可见的react google-recaptcha

我把包的类型按

代码语言:javascript
复制
yarn add @types/react-google-recaptcha

但是,当我想实现组件时,我在这里得到一个类型脚本错误

代码语言:javascript
复制
  <ReCAPTCHA
        ref={recaptchaRef} // IN HERE
        size="invisible"
        sitekey="Your client site key"
      />

这是错误的内容

键入'MutableRefObject‘不能指定键入'LegacyRef \未定’。键入“MutableRefObject”不能指定键入“刷新对象”。属性“当前”的类型不兼容。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-04 13:45:49

只需给它一个null的初始值。它以undefined作为当前实现中的初始值。

代码语言:javascript
复制
const recaptchaRef = useRef(null)
// or
const recaptchaRef = useRef<ReCAPTCHA>(null);

// ....

<ReCAPTCHA
  ref={recaptchaRef}
  size="invisible"
  sitekey="Your client site key"
/>

解释:

通过查看类型,ref属性期望类型如下所示:

代码语言:javascript
复制
(JSX attribute) React.ClassAttributes<ReCAPTCHA>.ref?: string | ((instance: ReCAPTCHA | null) => void) | React.RefObject<ReCAPTCHA> | null | undefined

代码语言:javascript
复制
string | ((instance: ReCAPTCHA | null) => void) | React.RefObject<ReCAPTCHA> | null | undefined

其中RefObject是:

代码语言:javascript
复制
interface RefObject<T> {
  readonly current: T | null;
}

因此,current的值应该是某种类型或null

票数 18
EN

Stack Overflow用户

发布于 2022-03-06 13:32:08

根据他们的文档:不可见reCAPTCHA,您只需要正确地键入recaptcha,就可以避免可能的类型记录错误。

通常,您不使用executeAsync方法,您可以使用React.createRef (因为Response16.3)并以这种方式键入recaptcha:

代码语言:javascript
复制
import ReCAPTCHA from "react-google-recaptcha";

const recaptchaRef = React.createRef<ReCAPTCHA>()
 
ReactDOM.render(
  <form onSubmit={() => { recaptchaRef.current.execute(); }}>
    <ReCAPTCHA
      ref={recaptchaRef}
      size="invisible"
      sitekey="Your client site key"
      onChange={onChange}
    />
  </form>,
  document.body
);

此外,您还可以使用executeAsync方法来使用基于承诺的方法。然后,您可以这样避免类型记录错误:

代码语言:javascript
复制
import ReCAPTCHA from "react-google-recaptcha";
 
 
const ReCAPTCHAForm = (props) => {
  const recaptchaRef = React.useRef<ReCAPTCHA>();
 
  const onSubmitWithReCAPTCHA = async () => {
    const token = await recaptchaRef?.current?.executeAsync();
 
    // apply to form data
  }
 
  return (
    <form onSubmit={onSubmitWithReCAPTCHA}>
      <ReCAPTCHA
        ref={recaptchaRef as React.RefObject<ReCAPTCHA>}
        size="invisible"
        sitekey="Your client site key"
      />
    </form>
  )
 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67385805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档