Здравствуйте.
Проблема заключается в том, что, когда я делаю fetch запрос с использованием хука useEffect, я вроде как в первом промизе получаю достоверную информацию, а в следующем промизе, когда я хочу сохранить эту инфу в переменную, она уже undefined.
Вот код:
const ChatList: React.FC = () => {
const [error, setError] = useState(null);
const [isLoaded, setLoaded] = useState(false);
const [response, setState] = useState<ServiceResponseGeneric<UserDto>>();
useEffect(() => {
fetch(URL)
.then(result => result.json() as Promise<ServiceResponseGeneric<UserDto>>)
.then(
(result) => {
setLoaded(true)
setState(result)
console.log(result) // здесь ничего уже не отображает, а если бы я поставил лог в начало, перед setLoaded, то все вывело бы. Как будто после setLoaded все куда то не туда идет
},
(error) => {
setLoaded(true)
setError(error)
}
)
}, [])
if (error) {
return <div>Ошибка</div>
} else if (!isLoaded) {
return <div>Загрузка</div>
} else {
return <div className="chatList">
<div className="messagesTitle">Последние сообщения</div>
{
Array.from(response?.Value!).map(item =>
<ChatListItem
chatId={item.Id}
chatName={item.Login}
messagePreview="Заглушка"
sentTime="21:14"/>)
}
</div>;
}
}
На всякий случай вот использованные классы
ServiceResponseGeneric
export class ServiceResponseGeneric<T> extends ServiceResponse{
Value: Array<T>
//он не наследует ничего такого важного, типа errorMessage: string и всякое такое
constructor(val: Array<T>) {
super();
this.Value = val
}
}
UserDto
export class UserDto {
Id: string = ""
Login: string = ""
}
В инете много ответов на этот вопрос, и они кажутся хорошими, но у меня не работает. Сервер возвращает все нормально.
Спасибо.