首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何映射使用axios获取的数组

如何映射使用axios获取的数组
EN

Stack Overflow用户
提问于 2020-06-07 23:17:45
回答 3查看 45关注 0票数 0

我正在开发一个聊天应用程序,并尝试第一次使用axios进行抓取。我已经成功地完成了fetch,因为当我console.logging它的时候,我看到了来自url的数组。但是,我希望映射数组中的所有消息,并为用户显示它们。但是我做错了什么,所以映射不起作用。有人能帮我解释一下原因吗?

这是我的代码(我相信是map-function造成了问题):

代码语言:javascript
复制
import React, { useState, useEffect } from 'react'
import { BrowserRouter, Switch, Route } from 'react-router-dom'
import axios from 'axios'


export const GetMessages = () => {
  const [userName, setUserName] = useState([]);
  const [userMessage, setUserMessage] = useState([]);

  const fetchResponse = async () => {
    try {
      const getResponse = await axios.get(
      'http://167.172.108.61/?storage=camilla_lofroth'
    )
    console.log(getResponse)
    setUserMessage(getResponse)
    } catch (error) {
      alert('Error')
    }
    return[]
  }  

  useEffect(() => {
    fetchResponse()
  }, [])

  console.log(userMessage)

  return (
    <div>
      {userMessage.map(message => (
        <p>{message.message}</p>
      ))}
    </div>
  )
  }
EN

回答 3

Stack Overflow用户

发布于 2020-06-07 23:30:52

数组中一些响应是object,这使得React无法呈现。第3至5项。

代码语言:javascript
复制
[
    {
        "message": "hej test"
    },
    {
        "message": "hej test",
        "id": "1"
    },
    {
        "message": {
            "mess": "Hi",
            "status": true
        }
    },
    {
        "message": {
            "mess": "Hi",
            "status": true
        }
    },
    {
        "message": {
            "mess": "Hi",
            "status": true
        }
    }
]
票数 0
EN

Stack Overflow用户

发布于 2020-06-07 23:34:00

看起来你把message作为数组中的一个对象。您必须检查它是否是对象,然后呈现所需的字段

代码语言:javascript
复制
import React, { useState, useEffect } from 'react'
import { BrowserRouter, Switch, Route } from 'react-router-dom'
import axios from 'axios'


export const GetMessages = () => {
  const [userName, setUserName] = useState([]);
  const [userMessage, setUserMessage] = useState([]);

  const fetchResponse = async () => {
    try {
      const getResponse = await axios.get(
      'http://167.172.108.61/?storage=camilla_lofroth'
    )
    console.log(getResponse)
    setUserMessage(getResponse)
    } catch (error) {
      alert('Error')
    }
    return[]
  }  

  useEffect(() => {
    fetchResponse()
  }, [])

  console.log(userMessage)

  return (
    <div>
      {userMessage.map(message => (
        <p>{message.message !== null && typeof message.message === 'object'? message.message.mess: message.message }</p>
      ))}
    </div>
  )
}
票数 0
EN

Stack Overflow用户

发布于 2020-06-07 23:35:21

实际上,当您使用axios时,返回的数据位于一个名为data的对象中。就像fetch API一样,您必须将.json()添加到响应中,还必须从axios响应中解析出数据。

在您的例子中,应该是这样的

代码语言:javascript
复制
const fetchResponse = async () => {
    try {
      const getResponse = await axios.get(
      'http://167.172.108.61/?storage=camilla_lofroth'
    )
    Const data = await getResponse.data
    Console.log(data)
    setUserMessage(data)
    } catch (error) {
      alert('Error')
    }
    return[]
  }  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62247464

复制
相关文章

相似问题

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