我是一个初学者,正在尝试学习 React 和 JavaScript。现在我正在开发一个从 Flickr API 获取数据的应用程序。问题是,在 Main.js 组件中尝试对 props 使用 map 方法时,我会收到以下错误:"Uncaught TypeError: this.props.photos.map is not a function"。在 Stackoverflow 上搜索后,我认为问题是 this.props 是 JavaScript 对象而不是数组。问题是我不知道如何将它转换为数组。有人可以解释一下我做错了什么吗?
我的代码:
我的代码:
class App extends Component {
constructor() {
super();
this.state = {
}
}
componentDidMount() {
let apiKey = 'xxxxxxxxxxxxxxxxxx';
let searchKeyword = 'nature';
let url = `https://api.flickr.com/services/
rest/?api_key=${apiKey}&method=flickr.photos.
search&format=json&nojsoncallback=1&&per_page=50
&page=1&text=${searchKeyword}`;
fetch(url)
.then(response => response.json())
.then(data => data.photos.photo.map((x) => {
this.setState({
farm: x.farm,
id: x.id,
secret: x.secret,
server: x.server})
// console.log(this.state)
}))
}
render() {
return (
<div className="App">
<Header />
<Main img={this.state.photos} />
<Navigation />
</div>
);
}
}
export default class Main extends Component {
render() {
return(
<main className="main">
{console.log(this.props.photos)}
</main>
)
}
}
编辑:
为什么this.props.img一开始是未定义的?
photo
?map
是Array
的一个方法。 - Davin Tryonthis.props.photos.map
的字样。但是,data.photos.photo.map
出现了,请问你是指它吗? - T.J. Crowdermap
,在map
回调函数内部,你正在调用setState
并且没有返回任何值,所以你将每个条目映射为undefined
;而且你根本没有使用map
的返回值(你返回了它,但没有任何东西使用该promise,所以它未被使用)。你几乎肯定不想这样重复调用setState
。 - T.J. Crowder