Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Reactjs:TypeError:无法读取属性';结果';未定义的_Javascript_Reactjs - Fatal编程技术网

Javascript Reactjs:TypeError:无法读取属性';结果';未定义的

Javascript Reactjs:TypeError:无法读取属性';结果';未定义的,javascript,reactjs,Javascript,Reactjs,我从RESTAPI获取数据,它返回一个带有结果数组的对象。当我尝试通过它进行映射时,会出现以下错误: TypeError:无法读取未定义的属性“results” 当我在代码中将这个对象声明为常量时,它不会返回任何错误,映射也会正常工作。但是当我尝试分配数据的结果时,它将不起作用。要正确执行此操作,您应该在promise链中调用setState() .then(data => { results = data; this.setState({results}); co

我从RESTAPI获取数据,它返回一个带有结果数组的对象。当我尝试通过它进行映射时,会出现以下错误:

TypeError:无法读取未定义的属性“results”


当我在代码中将这个对象声明为常量时,它不会返回任何错误,映射也会正常工作。但是当我尝试分配
数据的
结果
时,它将不起作用。

要正确执行此操作,您应该在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>
        );
    
        // ...
    }