我有一个工作的Django REST API,它返回以下内容:
{
"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>
);
}
型
当我尝试在我的网页上获取数据时没有显示错误。我做错了什么?
P.S.当我有一个对象数组时,可以从同一个API服务器获取数据,并且我使用map
来循环数据。在这里,我试图获取一个单一的项目,所以没有数组,只是一个对象。我的语法有什么问题吗?
3条答案
按热度按时间9vw9lbht1#
永远不要在
render
函数中使用fetch
或setState
。render
由于各种副作用而被多次调用,即滚动,点击, prop 改变等。这种代码可能会引起各种各样的麻烦。如果需要执行一次请求,请调用
componentDidMount
中的fetch
函数。另外,我认为你的回调应该看起来像这样:字符串
摘自docs:
componentDidMount()
在安装组件后立即调用。需要DOM节点的初始化应该在这里进行。如果您需要从远程端点加载数据,这是示例化网络请求的好地方。5jdjgkvh2#
我将setState之前的条件改为
JSON.stringify(data) !== JSON.stringify(this.state.data)
,现在它可以工作了。r7knjye23#
如果是:
字符串