Когда пользователь прибывает в этот компонент. Я хочу выполнить две функции в хуке useEffect: - hasError (возвращает true при возникновении ошибки) - hasState (возвращает true при наличии состояния)
В зависимости от состояния, которое я хочу вернуть, указав c компонент. Если доступ неверен, чем Если он истинен, чем
Когда пользователь впервые заходит на страницу, он говорит, что доступ, если false
, когда я обновляю sh страницу, это true
Почему нет обновление состояния в первый раз?
Я использую неправильный метод жизненного цикла?
Компонент:
const ContinueRouteComponent = () => {
const dispatch = useDispatch();
// const [access, setAccess] = useState(false);
// const [error, setError] = useState(false);
const query = useQuery();
//check if user has valid state
const hasState = (stateId: string) => {
// No state is given in the uri so no access
if(stateId === null) {
return false;
}
// You have a state in the uri but doesn't match the localstorage
return localStorage.getItem(stateId) !== null;
};
const hasError = (error: string) => {
return error !== null;
};
const [access, setAccess] = useState(() => hasState(query.get("state")));
const [error, setError] = useState(() => hasError(query.get("error")));
useEffect(() => {
dispatch(fetchResources());
},[]);
if(error){
let errorType = query.get("error");
let errorDescription = query.get("error_description");
return <Redirect exact={true} to={{
pathname: '/error',
state: {
error: errorType,
description: errorDescription
}
}} />;
}
if(access){
const retrievedStorage = JSON.parse(localStorage.getItem(query.get("state")));
localStorage.removeItem(query.get("state"));
return <Redirect exact to={retrievedStorage} />
} else {
return <Redirect to="/"/>
}
};
export default ContinueRouteComponent