javascript - React - Axios 数据一旦获取就不会渲染数据

标签 javascript reactjs asynchronous render axios

所以我有一个正在运行 Axios 请求的 React 组件,结果设置为我的“ist”状态属性,然后检查渲染。

我的问题是,因为它是异步请求,所以第一次渲染检查会进入 return <p>Loading...</p>;

我正在寻找一种方法,让我的组件渲染加载,直到 aync 请求完成,然后渲染结果。

这是我的代码:

// defealts
import React from 'react';
import { Helmet } from 'react-helmet';
import axios from 'axios';

class Home extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      pageName: 'Home',
      list: '',
    };
  }

  componentDidMount() {
    this.test();
  }

  test = () => {
    axios.get('https://api.myjson.com/bins/vqqml')
    .then((response) => {
      /* eslint-disable no-console */
      console.log(response);
      /* eslint-enable no-console */
      this.setState({ list: response.data });
    })
    .catch((error) => {
      /* eslint-disable no-console */
      console.log(error);
      /* eslint-enable no-console */
    });
  };

  render() {
    if (this.state.list.data) {
      return (
        <div>
          <p>{this.state.list.data.name}</p>
        </div>
      );
    }
    return <p>Loading...</p>;
  }
}

export default Home;

感谢任何帮助或建议 - 提前谢谢您。

最佳答案

它不会渲染,因为 this.state.list 没有 data 属性,它有 nameage car 属性。

您的 API 调用响应是:

{"name":"John","age":30,"car":null}

而不是

{"data":{"name":"John","age":30,"car":null}}

关于javascript - React - Axios 数据一旦获取就不会渲染数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46237349/

相关文章:

javascript - 操作对象文字: add property in certain order

javascript - 如何在 package.json 中选择 'module' 而不是 'main' 文件

javascript - React-Loadable 如何返回组件?

javascript - 使用 Jasmine,如何使用 callFake() 和 done() 测试异步调用?

c# - 异步编程 : await inside a function that is not async

javascript - 返回 promise 及内容(可以很多)

javascript - 如何跳过历史页面(使用react-router/js)

javascript - 最小示例 : Opening a window in electron from react application?

javascript - 基于先前调用的响应的异步调用,避免回调 hell

javascript - 如何使用javascript将数据存储到mysql数据库中?