Javascript 如何在signInWithPhoneNumber()成功时重置recaptcha
我正在使用带有PhoneNumber(数字,appVerifier)的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
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元素。下面的答案讨论了您的确切用例: