我有一个工作的Django REST,它返回如下:
{
"id": 1,
"brand": "peugeot",
"model": "3008",
"variant": "allure"
}
我使用以下代码获取上述数据:
render() {
const { brand, model, variant } = this.props;
let url = `http://127.0.0.1:8000/api/car/${brand}/${model}/${variant}/`;
console.log(url) <== url is correct when checked in console
fetch(url)
.then(response => response.json())
.then(data => data.length === 0 ? this.setState({
data : data
}) : null ) <== I have used a condition for setState to stop fetching infintely
const { data } = this.state;
console.log(data) <== This is a blank object with no data in console
console.log(data.id) <== This is undefined in console
return (
<div>
{data.id} <== No data is shown on webpage
Car Details
</div>
);
}
当我试图获取网页上的数据时,没有显示错误。我做错了什么?
当我有一个对象数组时,可以从同一个API服务器获取数据,并使用map
循环数据。在这里,我试图获取一个项目,这样就没有数组,只有一个对象。我在语法上做错什么了吗?
发布于 2018-06-08 08:38:24
您不应该在fetch
函数中使用render
或setState
。
由于滚动、点击、道具更改等各种副作用,render
被多次调用,这种代码会引起各种麻烦。
如果需要执行一次请求,请在fetch
中调用componentDidMount
函数。另外,我认为你的回调应该是这样的:
fetch(url)
.then(response => response.json())
.then(data => this.setState({ data : data }))
摘自文档
在安装组件后立即调用
componentDidMount()
。需要DOM节点的初始化应该放在这里。如果需要从远程端点加载数据,这是实例化网络请求的好地方。
发布于 2018-06-08 08:42:04
我将“setState”之前的条件更改为JSON.stringify(data) !== JSON.stringify(this.state.data)
,现在它起作用了。
发布于 2018-06-08 08:29:01
如果是:
.then(data => data.length > 0 ? this.setState({ data }) : null )
https://stackoverflow.com/questions/50756466
复制相似问题