Javascript 如何在signInWithPhoneNumber()成功时重置recaptcha

Javascript 如何在signInWithPhoneNumber()成功时重置recaptcha,javascript,reactjs,firebase,firebase-authentication,invisible-recaptcha,Javascript,Reactjs,Firebase,Firebase Authentication,Invisible Recaptcha,我正在使用带有PhoneNumber(数字,appVerifier)的Firebase.auth()符号 一切正常,但我正在努力解决以下问题: 以下是我的实现: useEffect(() => { window.recaptchaVerifier = new app.auth.RecaptchaVerifier("sendBtn", { size: "invisible", callback: function

我正在使用带有PhoneNumber(数字,appVerifier)的
Firebase.auth()符号

一切正常,但我正在努力解决以下问题:

以下是我的实现:

  useEffect(() => {
    window.recaptchaVerifier = new app.auth.RecaptchaVerifier("sendBtn", {
      size: "invisible",
      callback: function () {
        onSend();
      },
    });
  });

  const onSend = (value) => {
    const appVerifier = window.recaptchaVerifier;
    const setMobile = "valid mobile..";
    firebase
      .auth()
      .signInWithPhoneNumber(setMobile, appVerifier)
      .then(function (confirmationResult) { 
        appVerifier.reset()
        console.log(confirmationResult)
      })
      .catch(function (error) {
        appVerifier.reset()
        console.log(error);
      }); 
  };

我如何才能正确处理Recaptcha?没有多次渲染。我希望在Recaptcha成功后销毁它,我已经阅读了文档,但是clear()或reset()似乎不起作用

您必须提供useEffect的依赖项,否则每次组件渲染时都会执行它

useEffect(() => {
  // recaptcha
}, [])

您可以提供一个空的依赖项数组,以便仅在初始渲染后使用Effect进行触发,更多详细信息请参见本文

此外,在尝试初始化新的
recaptchaVerifier
之前,最好添加一个if检查,查看是否设置了
窗口。recaptchaVerifier
(如果您在页面上的任何其他位置有使用recaptcha的组件)

useEffect(() => {
  if (!window.recaptchaVerifier) {
    window.recaptchaVerifier = new app.auth.RecaptchaVerifier('sendBtn', {
      size: 'invisible',
      callback: function () {
        onSend();
      }
    });
  }
}, []);

谢谢,有没有办法在完成后卸载Recaptcha?只是想解决一个问题bug@Freddy. 据我所知,
.clear
函数用于此目的,但您必须自己清除DOM元素。下面的答案讨论了您的确切用例: