当前位置: 首页 > 知识库问答 >
问题:

无法更改Axios ReactJS中的状态,也无法按顺序检索数据

缪风史
2023-03-14

我试图从RapidAPI的API中获取2019年冠状病毒病的统计数据。我想按日期获取统计数据,将数据插入图形。问题是API链接只能有一个日期,像这样:

https://covid-19-data.p.rapidapi.com/report/totals?date-format=undefined

const today = new Date();
const dd = String(today.getDate()).padStart(2, '0');
const mm = String(today.getMonth() + 1).padStart(2, '0');

const [labels, setLabels] = useState([])

useEffect(() => {

    for(let i=dd-10; i<dd; i++) {
        Axios({
            method: 'GET',
            url: `https://covid-19-data.p.rapidapi.com/report/totals?date-format=undefined&format=undefined&date=2020-${mm}-${i}`,
            headers: {
                "x-rapidapi-host": "covid-19-data.p.rapidapi.com",
                "x-rapidapi-key": "cfb0f14a9fmsh913ae802309e7c9p175585jsn825aebcbd5ac"
            }
        })
        .then(response => {
            let temp = [...labels]
            temp.push(response.data[0].date)
            setLabels(temp)
        })
        .catch(error => {
            console.log(error)
        })
    }

}, [])

问题在于,每次Axios检索新日期时,标签都会更改,而不是将新日期附加到标签数组。

我在网上做了一些研究,人们说数据还没有加载,因此当我设置状态时,它会设置空的东西之类的东西,但我不太明白他们在说什么。

此外,当它检索数据时,它不会按顺序检索数据。例如,今天是4月15日,它应该按如下顺序检索数据:0506070809101121314,但它只是随机跳转。如果I console.log位于.then(),则会显示:

如你所见,这不是顺序。

请帮我看看,我在谷歌上搜索了解决方案,但没有用。


共有1个答案

双恩
2023-03-14

这是因为接收的结果是异步的并且状态更新是同步的。试试这个解决方案

useEffect(() => {
  const today = new Date();
  const dd = String(today.getDate()).padStart(2, "0");
  const mm = String(today.getMonth() + 1).padStart(2, "0");

  const fetchData = async (date) => {
    if (date >= dd) return;

    const result = await Axios({
      method: "GET",
      url: `https://covid-19-data.p.rapidapi.com/report/totals?date-format=undefined&format=undefined&date=2020-${mm}-${date}`,
      headers: {
        "x-rapidapi-host": "covid-19-data.p.rapidapi.com",
        "x-rapidapi-key": "cfb0f14a9fmsh913ae802309e7c9p175585jsn825aebcbd5ac",
      },
    });

    setLabels((val) => {
      let temp = [...val];
      temp.push(result.data[0].date);
      return temp;
    });
    fetchData(++date);
  };

  fetchData(dd - 10);
}, []);
 类似资料:
  • 我在iOS应用程序中实现了一个导航栏,我将淡色设置为白色,但在运行应用程序时,状态栏不跟随淡色,只是透明的(见图)。我的目标是状态栏有半透明的风格。 怎么解决这个问题?

  • 问题内容: MVC4 +实体框架4.4 + MySql + POCO /代码优先 我正在设置以上配置..这是我的课程: 这是我的web.config设置… 数据库AND表已经存在… 我对mvc还是很陌生,但是正在使用本教程 应用程序构建良好…但是,当我尝试使用Product(BTD.Data)作为我的模型类并使用BTDContext(BTD.DataContext)作为我的数据上下文类添加控制器时

  • 首先,我要说的是,我已经搜索并发现了许多与此类似的问题,但我发现的所有问题都使用jquery、bootstrap、react等。。。,而我只是想要一个简单的HTML/CSS/JS解决方案。 更改反应模式数据动态启动模式,在动态按钮上动态添加按钮模式弹出窗口 我拿了W3School的代码,做了一些调整来测试我的理论,结果让我相信动态创建的按钮不能改变html中现有的元素。https://www.w3

  • 本文向大家介绍jQuery 更改checkbox的状态,无效的解决方法,包括了jQuery 更改checkbox的状态,无效的解决方法的使用技巧和注意事项,需要的朋友参考一下 今天写页面遇到复选框动态全选或全不选问题,正常写法如下: but!第一次点击全选按钮input显示对勾,第二次就不行了,查了下有建议用prop的,亲测有效。那两者有啥区别呢? jQuery函数attr()和prop()的区别

  • 问题内容: 抱歉,我真的很想念React中子组件内部的传递。 我已经实现了一个包含3个组件的待办事项列表。 有一个组成部分和一个组成部分。状态仅存储在组件中。 显示器起步不错,因此可以看到道具。但是在提交表单后,我收到了以下错误: TypeError:this.props.tasks.map不是函数 当我console.log时,我没有得到我的数组,而是数组的长度。 你知道为什么吗? 编辑 :谢谢

  • 我正在尝试使用注册功能组件中的useState更新组件的状态。当用户输入无效的电子邮件地址并单击“提交”按钮时,以下代码将返回错误消息 我想用这段代码将错误消息设置为formData。 如何将错误消息设置为formData? 这是我的密码: