[英]How to fetch data an array instead of an object in JS?
所以我不是 100% 确定这是问题所在,但我使用 fetch 方法从这个链接https://swapi.py4e.com/api/people获取数据。 然后我尝试在上面使用.map
function 。 我没有工作,而是收到Unhandled Rejection (TypeError): jedis.map is not a function
错误。
当我控制台记录jedis
时,我得到了您在该链接中看到的所有内容,例如计数:87,下一个:“ https://swapi.py4e.com/api/people/?page=2 ”等。
我假设错误意味着绝地实际上是jedis
而不是数组。 但同样,我不完全确定这就是原因。 如果是,我如何访问数据以使jedis
是一个数组而不是 object
import React from 'react';
import './App.css';
import CardList from './CardList'
class App extends React.Component{
constructor() {
super();
this.state = {
jedis: []
}
}
componentDidMount() {
fetch('https://swapi.py4e.com/api/people').then(resp => resp.json())
.then(jedi => this.setState({jedis: jedi}));
}
render() {
return (
<CardList jedis={this.state.jedis}/>
)
}
}
export default App;
import React from 'react'
import Card from './Card'
const CardList = ({ jedis }) => {
return (
<div>
{
//console.log(jedis)
jedis.map((jedi, i) => {
return (
<Card
key = {i}
name = {jedi.name}
height = {jedi.height}
mass = {jedi.mass}
/>
)
})
}
</div>
)
}
export default CardList;
继承人 API 我正在使用以防万一有人想知道http://swapi.py4e.com/
根据 API 的响应,
将您的CardList
组件道具更改为:
<CardList jedis={this.state.jedis.results} />
此外,您需要将 state 初始化更改为:
this.state = {
jedis: {
count: 0,
previous: null,
next: null,
results: []
}
}
假设您想在每次提取时继续添加到数组中,您将需要使用扩展运算符和previousState
。
fetch('https://swapi.py4e.com/api/people').then(resp => resp.json())
.then(jedi => {
this.setState((previousState) => {
return {
jedis: [...previousState.jedis, jedi.results],
};
});
});
这很简单。 实际上,您需要将响应 object 转换为 Array 并且您可以在其上运行map
。 下面是一个示例,假设您将数字作为键,如果您的 obj 响应键不是数字而是常规字符串,您可以在 return 语句中将Number(key)
替换为key
。
var obj = { "1": 5, "2": 7, "3": 0, "4": 0}; var result = Object.keys(obj).map(function (key) { return [Number(key), obj[key]]; });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.