Javascript Reactjs:TypeError:无法读取属性';结果';未定义的
我从RESTAPI获取数据,它返回一个带有结果数组的对象。当我尝试通过它进行映射时,会出现以下错误: TypeError:无法读取未定义的属性“results”Javascript Reactjs:TypeError:无法读取属性';结果';未定义的,javascript,reactjs,Javascript,Reactjs,我从RESTAPI获取数据,它返回一个带有结果数组的对象。当我尝试通过它进行映射时,会出现以下错误: TypeError:无法读取未定义的属性“results” 当我在代码中将这个对象声明为常量时,它不会返回任何错误,映射也会正常工作。但是当我尝试分配数据的结果时,它将不起作用。要正确执行此操作,您应该在promise链中调用setState() .then(data => { results = data; this.setState({results}); co
当我在代码中将这个对象声明为常量时,它不会返回任何错误,映射也会正常工作。但是当我尝试分配
数据的结果时,它将不起作用。要正确执行此操作,您应该在promise链中调用setState()
.then(data => {
results = data;
this.setState({results});
console.log(results);
}
然后可以在render()
中创建
元素:
render(){
const mapCats=Object.keys(this.state.results.results).map(key=>
{this.state.results.results[key].name}
);
// ...
}
注意,我假设调用fetch()
的函数在您的类中。你可以用一个全局函数做你想做的,但是它有点复杂。不过,基本思想是一样的。因为您在设置变量之前就使用了它。@epascarello怎么会这样?我是否需要等待它被分配一个值,然后进行回调?因为fetch调用是异步的,所以代码在运行映射行后激发。这就是fetch有承诺的原因。代码将必须在中运行,但您将无法返回它。可能的重复工作。我将函数更改为类,添加了一个空数组do my state并将结果传递给它。谢谢“我只是在等着,直到我能把你的答案标为正确答案为止。”吉尔梅普。很高兴听到你填写了我答案中遗漏的细节。
{
"results": [
{
"objectId": "JoT2miD1vo",
"name": "Mercado",
"createdAt": "2018-11-08T13:49:25.600Z",
"updatedAt": "2018-11-08T13:50:08.721Z"
},
{
"objectId": "DEuZHY7BwY",
"name": "Panificadora",
"createdAt": "2018-11-08T13:49:40.385Z",
"updatedAt": "2018-11-08T17:06:09.129Z"
},
{
"objectId": "V3g1FXNtLK",
"name": "Farmácia",
"createdAt": "2018-11-08T13:50:02.293Z",
"updatedAt": "2018-11-08T13:50:02.293Z"
},
{
"objectId": "Psl9GWqB4F",
"name": "Loja",
"createdAt": "2018-11-08T13:50:34.696Z",
"updatedAt": "2018-11-08T13:50:34.696Z"
},
{
"objectId": "ezlncu6cd1",
"name": "Lanchonete",
"createdAt": "2018-11-08T13:50:41.649Z",
"updatedAt": "2018-11-08T13:50:41.649Z"
},
{
"objectId": "vDgxIW69rr",
"name": "Sorveteria",
"createdAt": "2018-11-08T13:50:54.824Z",
"updatedAt": "2018-11-08T13:50:54.824Z"
},
{
"objectId": "VdxckEDG7q",
"name": "Food Truck",
"createdAt": "2018-11-08T13:51:14.096Z",
"updatedAt": "2018-11-08T13:51:14.096Z"
},
{
"objectId": "LHrGCT9SCs",
"name": "Pizzaria",
"createdAt": "2018-11-08T16:12:48.317Z",
"updatedAt": "2018-11-08T16:12:48.317Z"
}
]
}
.then(data => {
results = data;
this.setState({results});
console.log(results);
}
render() {
const mapCats = Object.keys(this.state.results.results).map(key =>
<li key={key}>{this.state.results.results[key].name}</li>
);
// ...
}