У меня есть PrivateRoute
функциональный компонент, который решает визуализировать компонент, который был передан как реквизит для пользователя, к которому он имеет доступ, на основе его аутентификации или перенаправления на неавторизованный маршрут.
isValidToken
- это асинхронная c функция , проверяет, есть ли у пользователя действительный токен или нет, и возвращает логическое значение , назначенное isUserLogged
.so, когда я вызвал эту функцию в useEffect
перехватывает ее ожидание разрешения функции, но до ее завершения происходит перенаправление. так как же я жду, пока он не разрешится и не отрендерится на основе этого значения, прежде чем разрешится обещание?
import React, { useState, useEffect } from "react";
import { Route, Redirect } from "react-router-dom";
import isValidToken from "../utils/isValidToken";
const ProtectedRoute = ({ component: Comp, path, redirectto, ...rest }) => {
const [isloggedin, setloggedin] = useState(false);
useEffect(() => {
(async function() {
const isUserLogged = await isValidToken();
setloggedin(isUserLogged);
})();
}, []);
return (
<Route
path={path}
{...rest}
render={props => {
return isloggedin ? (
<Comp {...props} />
) : (
<Redirect to={redirectto} />
// <h1>404 error</h1>
);
}}
/>
);
};
export default ProtectedRoute;