为了账号安全,请及时绑定邮箱和手机立即绑定

如何仅在承诺处于活动状态时才显示和隐藏弹出窗口?反应

如何仅在承诺处于活动状态时才显示和隐藏弹出窗口?反应

一只甜甜圈 2022-08-27 15:24:17
我尝试使用firebase处理Facebook登录 - firebase doc。关于第4a点是我试图用承诺来做到这一点,但老实说,我不知道在这种情况下如何渲染弹出组件......Handling account-exists-with-different-credential Errorsvar password = promptUserForPassword(); // TODO: implement promptUserForPassword.现在我有这个承诺:passwordAskPromise.then((password) => {                            console.log(password)                            firebase.auth().signInWithEmailAndPassword(email, password).then(function(userCredential) {                                return userCredential.user.linkWithCredential(pendingCred);                              })                        })承诺代码:const passwordAskPromise = new Promise((resolve, reject) => {    const setDecision = decision => {        if(decision)            resolve(decision)        else            reject(decision)        }    ReactDOM.render(<AskAboutPassword setDecision={(value) => setDecision(value)}/>, document.getElementById("popup"))})export default passwordAskPromise;和 AskAboutPassword:const AskAboutPassword = props =>{     const [password, setPassword] = useState('')    return (        <div className={styles.AskAboutPasswordContainer}>            <input type="text" value={password} onChange={(e)=>setPassword(e.target.value)}/>            <button onClick={() => props.setDecision(password)}>YES</button>            <button onClick={() => props.setDecision(false)}>NO</button>        </div>    )}export default AskAboutPassword;所有逻辑都有效,但此时此“弹出窗口”一直在屏幕上,因为我添加到索引.html文件。<div id="popup></div>
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

您可以尝试 https://www.npmjs.com/package/react-promise-tracker,它提供了一个方便的usePromiseTracker钩子,如果请求正在飞行,则返回true。


您可以指定应跟踪哪些承诺。它主要设计用于显示微调器或其他视觉反馈倒入,它应该在您的情况下有用。


包装您的承诺以跟踪其状态:


import { trackPromise } from 'react-promise-tracker';


[...]


trackPromise(fetch(something));


// now react-promise-tracker keeps track of the promise returned by fetch(something)

然后在任何组件中,您可以:


import { usePromiseTracker } from 'react-promise-tracker';

[...]


const MyComponent = () => {

  const { promiseInProgress } = usePromiseTracker();


  return (promiseInProgress ? <ComponentIfPromiseFlying /> : <OtherComponent />);

}    


查看完整回答
反对 回复 2022-08-27
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号