首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何告诉useEffect等待数据接口?

如何告诉useEffect等待数据接口?
EN

Stack Overflow用户
提问于 2021-11-24 12:54:27
回答 2查看 90关注 0票数 0

我希望从API获取数据并映射响应以显示它。

代码语言:javascript
复制
import React from 'react'
import { useState, useEffect } from 'react'
import axios from 'axios'

export default function Nav() {

   const options = {
      method: 'GET',
      url: 'url',
      headers: {
         'x-rapidapi-host': 'host',
         'x-rapidapi-key': 'key'
      }
   }

   const [allCoins, setAllCoins] = useState([])

   useEffect(() => {
      axios.request(options)
      .then(res => setAllCoins(res.data.data.coins))
      .catch(err => console.error(err))
   }, [])

   return (
      <nav>
          {allCoins.map(el => {
              <img src={el.iconUrl} alt="" />
              <h2>{el.name}</h2>
              <span>{el.symbol}</span>
          })}
      </nav>
   )
}

但没有显示任何内容。我知道这是一个异步问题,我必须等待状态中的数据,然后才能映射它,但我不知道如何做,我也没有在Google上找到解决方案。

EN

回答 2

Stack Overflow用户

发布于 2021-11-24 14:21:28

好了,最后我解决了我的问题,它不是异步的,只是语法错误。我为map箭头函数使用了{}而不是()。

代码语言:javascript
复制
allCoins.map(el => { ...})❌

allCoins.map(el => ( ...))✅
票数 0
EN

Stack Overflow用户

发布于 2021-11-24 13:15:28

您需要调用asynchronously接口,但您在这里并没有这样做。如果其他一切都是正确的,那么这两个代码块应该可以工作。

代码语言:javascript
复制
useEffect(() => {
    const getData = async () => {
        const data = await axios.request(options)
        setAllCoins(res?.data?.data?.coins)
    }
    getData()
}, [])

我们直接在useEffect中实现异步,我们只能通过创建异步方法并在useEffect hook中调用它来实现这一点。

你还需要在map中修改你的代码:

代码语言:javascript
复制
{
    allCoins.length > 0 && allCoins.map(el => {
        return <>
            <img src={el.iconUrl} alt="" />
            <h2>{el.name}</h2>
            <span>{el.symbol}</span>
        </>
    })
}

JSX表达式必须有一个父元素

所以你需要用一个元素或者React.Fragment来包装你的元素。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70096469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档