[英]How to map over an array that is fetched using axios
我正在開發一個聊天應用程序,並嘗試首次使用 axios 進行獲取。 我成功地進行了提取,因為當我控制台記錄它時,我看到了來自 url 的數組。 但是我想對數組中的所有消息進行 map 並將它們顯示給用戶。 但是我做錯了,所以映射劑量起作用。 有人可以幫我看看為什么嗎?
這是我的代碼(我相信它是造成問題的地圖功能):
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>
)
}
數組中的一些響應是 object,這使得 React 無法渲染。 第 3 項至第 5 項。
[
{
"message": "hej test"
},
{
"message": "hej test",
"id": "1"
},
{
"message": {
"mess": "Hi",
"status": true
}
},
{
"message": {
"mess": "Hi",
"status": true
}
},
{
"message": {
"mess": "Hi",
"status": true
}
}
]
似乎您在數組中有消息作為 object 。 您必須檢查其是否為 object,然后呈現必填字段
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>
)
}
實際上,當您使用 axios 時,返回的數據在稱為數據的 object 內部。 就像獲取 API 一樣,您必須將 .json .json()
添加到響應中,您還必須從 axios 響應中解構數據。
在你的情況下,它應該是這樣的
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[]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.