В вашей ветке if (user === null)
вы ничего не возвращаете, поскольку axios.get(...)
является вашим последним утверждением.
Поскольку axios.get
вернет Promise
, вы не сможете сказать return axios.get
в методе рендеринга, который ожидает синхронные результаты, как это делает React.
В таком случае вы должны использовать состояние (либо useState
перехватывает, либо использовать setState
) и устанавливать состояние для загрузки, пока вы пройдите через ax ios и, когда закончите, установите состояние для полученного результата (и верните Redirect вместо загрузчика).
Примерно так:
const Dashboard = () => {
const [redirect, setRedirect] = useState(null);
useEffect(() => {
const user = JSON.parse(sessionStorage.getItem('user'));
if (user === null) {
console.log('in');
axios.get('/user')
.then((response) => {
console.log(response.data);
sessionStorage.setItem('user', JSON.stringify(response.data));
if (response.data.type === 'investor') {
console.log('go to startups'); // LINE 17
setRedirect("/startups");
}
console.log('go to investors');
setRedirect("/investors");
})
.catch(() => {
console.log('go to investors');
setRedirect("/investors");
});
} else if (user.type === 'investor') {
console.log('go to startups'); // LINE 28
setRedirect("/startups");
} else {
console.log('go to investors');
setRedirect("/investors");
}
}, []);
return (
<div>{redirect === null ? "Loading user.type" : <Redirect to={redirect} />}</div>
);
}