Подождите, пока обещание будет разрешено из React.Context, затем нажмите кнопку рендеринга - PullRequest
0 голосов
/ 10 июля 2020

У меня есть функция, которая запускается, когда пользователь входит в приложение.

signin: (email, password, setErrors, setUser, setUserIdToken) => {
    firebase
      .auth()
      .signInWithEmailAndPassword(email, password)
      .then(res => {
        const user = res.user
        const isVerified = user.emailVerified
        firebase
          .auth()
          .currentUser.getIdTokenResult()
          .then(idTokenResult => {
            setUserIdToken(idTokenResult)
          })
          .catch(error => console.log(error))

        setUser(user)
        const db = firebase.firestore()
        if (isVerified) {
          db.collection('/users')
            .doc(user.uid)
            .update({ isVerified: true })
        }
      })
      .catch(err => {
        setErrors(prev => [...prev, err.message])
      })
  },

У меня есть другой компонент, который использует user и userIdToken из метода signIn.

const Home = () => {
  const { handleSignout, user, userIdToken } = useContext(firebaseAuth)
  const { emailVerified, email } = user
  const { claims } = userIdToken

  return (
    <div>
      Home page component
      <SurveyResults />
      {emailVerified && email.endsWith('xxx') && !claims.admin ? (
        <button type="button">hi</button>
      ) : null}
      <button type="submit" onClick={handleSignout}>
        sign out
      </button>
    </div>
  )
}

export default Home

У меня нет доступа к свойствам userIdToken сразу после рендеринга Home, так как я все еще жду разрешения обещания .. Но мне также нужно проверить свойства userIdToken для рендеринга кнопки. Не знаю, как это сделать?

...