我通过做在API调用axios
中React
使用UseEffect
。
我们将响应设置为一个名为data
using的变量useState
const [data, setData] = useState({});
setData(response);
响应来自 NASA API,我们只得到一个为此调用返回的对象(粘贴在下面)。
由于我将响应命名为“data”并且它也有一个“data”键,如果我想记录 url,我知道我会输入console.log(data.data.url)
并且在我的app.js
主函数中可以顺利运行。在我的card.js
组件中,我可以成功登录console.log(data)
并console.log(data.data)
提供您所期望的内容,但是当我console.log(data.data.url)
或(data.data.title)
它由于某种原因而变成时undefined
,这会导致 JSX 的返回函数出现大错误,并且站点将无法加载:
TypeError: Cannot read property 'data' of undefined error.
我不认为我的命名有任何问题,因为它在对象的更高级别上工作正常,例如console.log(data.data)
工作,我在眼前看到列出的下一级属性。
我真的是在 console.logging 这个:
{console.log('FROM INSIDE THE RETURN')}
{console.log(props.data)} // works, displays object {}
{console.log(props.data.data)} //works, displays object one level lower
{console.log(props.data.data.url)} // type error. You name the property.
不用说这行不通,这是我完成任务的第一种方法:
<img src={props.data.data.url}/>
也就是说,我们在团队领导的帮助下通过剃掉上游对象的顶层来使程序工作,如下所示:
SetData(response.data)
// as opposed to
SetData(response)
// and then using
<img src={props.data.url}/>
所以我们不必深入到 props 的底部,但为了清楚起见,我想知道它为什么会对编译器产生影响以及它有什么不同,特别是当它可以正常工作到 n-1 层时,其中 n 是数字对象的层数。
我什至更改了其中一个数据变量的名称,因此“数据”不会重复并且行为是相同的。
感谢您的帮助和见解!我非常感谢您可以分享的任何见解以及对我的问题的反馈。
这是我正在使用的对象。
{
data: {
copyright: "Bryan Goff",
date: "2020-03-18",
explanation: "What's happening behind...[truncated]...Florida, USA.",
hdurl: "https://apod.nasa.gov/apod/image/2003/AntiCrepRays_Goff_3072.jpg",
media_type: "image",
service_version: "v1",
title: "Anticrepuscular Rays over Florida",
url: "https://apod.nasa.gov/apod/image/2003/AntiCrepRays_Goff_960.jpg"
},
status: 200,
statusText: "OK",
headers: {
contenttype: "application/json"
},
config: {
url: "https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY",
method: "get",
headers: {
Accept: "application/json, text/plain, */*"
},
transformRequest: [
null
],
transformResponse: [
null
],
timeout: 0,
xsrfCookieName: "XSRF-TOKEN",
xsrfHeaderName: "X-XSRF-TOKEN",
maxContentLength: -1
},
request: {}
}