почему не вернуть Бег? - PullRequest
       0

почему не вернуть Бег?

0 голосов
/ 12 марта 2020

Почему возврат не работает? Это потому, что оно вложено в оператор 2 if? Я пытаюсь сделать это в React, где я проверяю пользовательские утверждения от Firebase, и если пользователь является администратором, он будет перенаправлен на домашнюю страницу администратора. Спасибо ~!

export default function() {
  const classes = useStyles();
  const { currentUser } = useContext(AuthContext);


    if (currentUser != null) {
      currentUser.getIdTokenResult().then(idTokenResult => {
        if (idTokenResult.claims.adminRole) {
          return <Redirect to="/adminHome" />;
        }
      });
    }

   return ( ... )
}

Ответы [ 2 ]

2 голосов
/ 12 марта 2020

<Redirect to="/adminHome" /> может работать, но не в вашем случае. Поскольку getIdTokenResult является асинхронной c операцией, а return в конце вашего компонента вернет результат до завершения асинхронной c getIdTokenResult операции. А когда getIdTokenResult завершится, уже слишком поздно что-то возвращать.

Чтобы сделать перенаправление, сделайте следующее:

  1. история импорта

    импорт {useHistory} из'act-router-dom '

  2. Использовать хук в компоненте

    const history = useHistory ()

И замените ваш код:

return <Redirect to="/adminHome" />;

на следующий:

history.push('/adminHome')
0 голосов
/ 12 марта 2020

в настоящее время ваше состояние не проходит. Просто измените оператор if.

if (idTokenResult.claims && idTokenResult.claims.adminRole) {
          return <Redirect to="/adminHome" />;
 }

Если в начальном рендере существует idTokenResult.claims.adminRole, вы также можете попробовать this.props.history.push("/adminHome") return null;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...