javascript - 使用 React.js 渲染 API 响应

标签 javascript reactjs iteration

我正在尝试渲染我创建的简单 api 的响应,但是当我尝试迭代这些项目时,它是未定义的。我知道这与异步编程有关,但不知道如何解决它。有人可以帮忙吗?

import React from 'react';

export default class Home extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            items: undefined
        };
    }
    componentDidMount() {
        fetch('https://petzie-cajuhqnpqy.now.sh/breeds')
        .then(res => res.json())
        .then(data => {
            this.setState(() => {
                return {
                    items: data.result
                };
            });
            console.log(this.state);
        })
        .catch(err => console.log(err));
    }
    render() {
        return (
            <div>    
                { this.state.items.map((item) => {
                    return <p>{item.name}</p>;
                }) }         
            </div>
        );
    }
}

最佳答案

首先,如果你要通过 this.state.items 访问 .map,它在任何时候都不能是未定义的,否则你会抛出一个错误(.map 需要一个数组)。因此,在您的构造函数中,将其定义为空数组:

constructor(props) {
    super(props);
    this.state = { items: [] };
}

其次,setState 是异步的。因此,当您立即调用 setStatethis.state 时,该对象尚未更新。但由于 React 的本质,每当它更新时,您的渲染函数都会被再次调用,这次 this.state.items 将从 API 获取数据。

关于javascript - 使用 React.js 渲染 API 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49435955/

相关文章:

javascript - JSON.parse (' ' ) - nodeJs 或 JS 或 V8 中的源代码在哪里?

javascript - .innerhtml 没有将内容放入 "DIV"

javascript - 如果我不知道名称,如何访问 javascript 对象的属性?

javascript - 将类添加到 div,每个 div 的数量增加

python - 值的长度与索引的长度不匹配

javascript - 如何处理 ExtJs 上的错误

15 到 225 之间的 JavaScript 随机数以 30 递增?

javascript - 如何在 React 错误边界中使用自定义错误类型?

reactjs - 如何在 React 中使 owl-carousel 响应式?

javascript - 如何在 React with Jest(无 enzyme )中测试功能组件的状态