javascript - 无法读取未定义的属性“xxx”-使用 axios
问题描述
我在访问 api 返回的一些数据时遇到问题。当我像这样使用 setPosts(data) 分配数据时
useEffect(() => {
axios.get("https://api.randomuser.me/")
.then(res => {
console.log(res)
const data = res.data.results["0"]
setPosts(data) })
},[])
进入这里: const[posts,setPosts] = useState({data: []})
我可以用这个 <div>{posts.gender}</div>
但是当我尝试降低一步时<div>{posts.name.first}</div>
,我得到了标题中的错误。当我检查控制台时,我可以看到所有数据都在那里。
谢谢
解决方案
在您的效果中,您正在设置一个将用户描述为您的状态的对象posts
,例如
{
gender: "female",
name: {
title: "Miss",
first: "Nicoline",
last: "Løvli"
},
location: {
...
}
但是,当您在其中创建状态时const[posts,setPosts] = useState({data: []})
- 您将对象设置{data: []}
为posts
默认值。
在您的第一次渲染期间,尚未从请求中检索到用户的数据,因此该组件仍在使用{data: []}
.
何时<div>{posts.gender}</div>
呈现 - 它没有失败,因为在这种情况下posts.gender
value 只是undefined
- 你试图gender
从 object访问字段{data: []}
。所以它呈现一个空的div
.
同时,当<div>{posts.name.first}</div>
尝试渲染时 -posts.name
也只是undefined
,您基本上是在尝试first
从undefined
.
推荐阅读
- javascript - 如何在 next.config.js 中使用 next-images 和 rewrite
- kotlin - 注解处理时如何检查Element表示的类是指定类的子类型?
- php - 从第一个表中选择特定列,在 Laravel 中进行预加载
- python - popen.kill 不关闭浏览器窗口
- python - Django Rest api - 如何将多个表中的数据插入到单个表中
- npm - npm install code 1 错误 git dep 准备失败
- powershell - 卷曲到 Invoke-WebRequest
- rest - Apache Camel HTTP4 组件忽略 Date: Header
- reactjs - Chakra-paginator - Next.js - Chakra UI - 内存泄漏
- swift - 在 swift ios 中调用嵌套函数时遇到问题