【发布时间】:2018-05-03 00:23:23
【问题描述】:
我是 React js 的新手,而不是 javascript 开发人员,但我可以破解我的解决方案。
我有提供简单数组的 Django API url。我可以成功地使用axios.get 来检索 url json。但我不知道如何使用map 将数组内容呈现为一个简单的列表。
我收到"TypeError: this.state.items.map is not a function"
我的代码:
import React from 'react';
import axios from 'axios';
import './App.css';
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
items: []
};
}
componentDidMount() {
axios.get('http://localhost:8800/?format=json')
.then(result => {
this.setState({ items: result.data });
});
}
render () {
return <ul>
{this.state.items.map(item =>
<li>{item} </li>)}
</ul>
}
}
export default App;
axios.get的回复是这样的:
{
"users":"http://localhost:8800/users/?format=json",
"photos":"http://localhost:8800/photos/?format=json",
"teams":"http://localhost:8800/teams/?format=json"
}
我想将其呈现为 HTML 列表:
users - http://localhost:8800/users/?format=json,
photos - http://localhost:8800/photos/?format=json,
teams - http://localhost:8800/teams/?format=json
解决方案似乎是重写这部分代码。
render () {
return <ul>
{this.state.items.map((item, i) =>
<li key>{item} </li>)}
</ul>
}
我见过许多类似的问题和答案,但不同的情况有很多令人惊讶的种类,但没有一个适用于我的具体情况。
谁能指出:
a) 我错过了什么和 b) 它与什么一般的 React 和/或 javascript 原则相关,以及 c) 任何我可以自己理解的文档?
【问题讨论】:
-
您在
The json array is like this:中发布的内容实际上是一个对象,而对象没有map功能。请发布从http://localhost:8800/?format=json收到的回复示例。因此,您可能需要将渲染函数更改为this.state.items.users.map.... -
另外,我认为您实际上并没有解析 JSON。我认为在您的
axios.get命令之后和您之前setState之前应该有一个.then(response => response.json())。 -
正如@AlexandrFedotov 已经说过的那样,您的 API 结果是一个对象而不是数组,并且为了遍历对象并呈现它,您可以在结果上使用 Object.keys() 函数映射。请参阅此答案以供参考stackoverflow.com/questions/43721168/…
-
更新了帖子以反映我所说的 JSON 实际上是来自
axios.get的响应。好的,所以我的响应不是 JSON,而是一个对象。将尝试 Object.keys() 循环并呈现响应。
标签: javascript arrays reactjs