Javascript 对象上的映射返回false
我正在调用一个动态api来返回一些值,这个调用返回一个Json,如下所示:Javascript 对象上的映射返回false,javascript,reactjs,Javascript,Reactjs,我正在调用一个动态api来返回一些值,这个调用返回一个Json,如下所示: {name:“test”,resource_group:“group1”,location:“westeurope”,disk_size:“30GB”,os_type:“Linux”,…} let url const [MachinesRow, setMachinesRow] = React.useState([]) React.useEffect(() => { resource_group.forEach((k
{name:“test”,resource_group:“group1”,location:“westeurope”,disk_size:“30GB”,os_type:“Linux”,…}
let url
const [MachinesRow, setMachinesRow] = React.useState([])
React.useEffect(() => {
resource_group.forEach((keyword, index) => {
url = "/api/machine/" + keyword + "/" + name[index]
fetch(url, {
method: "GET",
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + window.localStorage.getItem("access_token"),
},
})
.then(resp => {
return resp.json()
})
.then(data => {
setMachinesRow(data)
})
.catch(error => {
console.log(error)
window.localStorage.removeItem("access_token")
window.location.replace("/")
})
})
}, [])
如果我执行{console.log(MachinesRow)}
操作,我会得到一个空数组和3个对象,这个空数组是因为在得到对象之前,如果不得到未定义的值,我就找不到另一个解决方案来得到对象,但是当我试图像这样映射它们以获得名称时,例如:
const d = MachinesRow.length > 0 && MachinesRow.map((row)=>{
return (row.name);
});
然后执行{console.log(d)}
我得到:
这将返回false作为值,我不知道为什么,我试图搜索,但没有找到类似的问题。您获得的数据是
资源组数组中项目数的两倍,因此您在每次迭代中都将新数据设置为您的状态。您正在将正确的初始数据设置为您的状态。然后你试图把你的数据放在一起,结果失败了。这可能会有所帮助,因此:
.then(data => {
setMachinesRow([...MachinesRow, ...[data]])
})
将从您的所有请求中收集数据。然后,您可以将MachinesRow
映射为对象数组。如果MachinesRow.length==0
,则和&
将短路并返回初始化d
的整个表达式的false
。再说一遍,你想在那里实现什么?我想映射Json对象。我试图创建一个返回值的常量,只是想看看它的console.log是什么,但我想要的是映射所有对象,但是如果我不执行`MachinesRow.length>0`我将在获取对象之前获取未定义的返回值,然后当我尝试映射它们时,我将得到一个错误,即无法映射未定义的值。不过,除了初始值设定项表达式之外,还有其他地方可以进行该检查。就像一个if声明。抱歉是我的错,它现在起作用了,谢谢。有任何方法可以只返回数据,而不返回第一个空数组,因为如果不将React.useState([])
设置为空数组,则第一个响应将是未定义的