Я новичок, чтобы реагировать (и на попытки использовать крючки).Я загружаю пользовательские данные и перебираю их, чтобы создать список этих пользователей.Когда я пытаюсь добавить значок, который возвращает количество элементов, связанных с пользователем, user.tasks.length считается неопределенным, что приводит к ошибке.
Если я удалю .length, имена клиентов будут успешно обработаны.Поэтому я предполагаю, что исходные данные не определены.Я могу console.log user.tasks, поэтому он загружается.Я установил обработчик значка с помощью (typeof user.tasks! == 'undefined'), но он не перерисовывается после загрузки данных и возвращает только результат else (null)?
Мои данные выглядят так:
ListOfTeam.users = [
{ _id: objectId,
firstName: string,
tasks: [array of strings]
]
Я подумал, что useEffect повторно отображает весь DOM и, таким образом, повторно отображает этот список компонентов.Ошибка первоначального запуска разрушает какие-либо рендеры после загрузки данных?Является ли badgeHandler неправильным способом думать об этом?
const Dashboard4 = () => {
const [user, setUser] = useState({})
const [ListOfTeam, setListOfTeam] = useState({ users: [] })
useEffect(() => {
axios.get('http://localhost:3001/api/users/me')
.then(res => {
setUser({ user: res.data })
});
}, [])
useEffect(() => {
const fetchData = async () => {
const result = await
axios.get('http://localhost:3001/api/users/userlist/',
);
setListOfTeam(result.data)
}
fetchData();
}, [user]);
const handleBadge = () => {
if (typeof user.tasks !== 'undefined') {
return user.tasks.length;
} else {
return null
}
}
return (
<div>
<List>
{ListOfTeam.users.map(user => {
return (
<div key={user._id}>
<Badge badgeContent={handleBadge()} color="primary">
<ListItem button >
<ListItemIcon>
<PeopleIcon />
</ListItemIcon>
<ListItemText primary={user.firstName} />
</ListItem>
</Badge>
</div>);})}
</List>
</div>