【发布时间】:2021-11-14 14:08:30
【问题描述】:
我正在尝试使用 axios 从 jsonplaceholder 获取的用户数据映射卡片组件。但是,当我尝试时,它返回“TypeError:无法读取未定义的属性(读取'map')”。我尝试了网络上的所有解决方案,但均未成功。 请帮忙!
这是声明“用户”的代码;
export const useAllUsers = () => {
const [users, setUsers] = useState<Array<User>>()
const getUsers = useCallback(() => {
axios
.get<Array<User>>('https://jsonplaceholder.typicode.com/users')
.then(res => {
setUsers(res.data)})
.catch(() => {
return <MessageError />
})
.finally(()=>{
setLoading(false)
})
}, [])
return { getUsers, loading, users }
}
然后,我尝试映射“用户”获取所有用户数据,如下所示:
export const UserManagement: VFC = memo(() => {
const { getUsers, users, loading } = useAllUsers()
useEffect(() => getUsers(), [])
return (
<>
{loading ? (
<div className=' flex justify-center items-center'>
<div className='animate-spin rounded-full h-32 w-32 border-b-2 border-gray-900'></div>
</div>
) : (
<div
className='grid
grid-cols-2 mb-16 md:grid-cols-3 lg:grid-cols-4 sm:px-6 md:px-16'
>
<div className='grid mx-auto'>
{users.map(user => (
<UserCard
key={user.id}
userName={user.username}
imageUrl='https://source.unsplash.com/random'
userId={user.name}
/>
))}
</div>
</div>
)}
</>
)
})
用户类型只是有一堆用于用户数据的类型,所以我想这不是问题吗?
export type User = {
id: number
name: string
username: string
email: string
hobbies: string
}
【问题讨论】:
-
改成这样:
const [users, setUsers] = useState<Array<User>>([])所以初始状态是一个空数组而不是未定义。 -
哦,成功了!非常感谢!
标签: javascript reactjs typescript react-hooks create-react-app