#reactjs #api #async-await
Вопрос:
Я могу получить ответ от API, но не могу преобразовать ответ в Json и не могу вернуть данные. Он просто возвращает значение null.
const responseData = async () => {
try{
const response = await axios.get('https://randomuser.me/api')
console.log(response) // console object
const jsonData = await response.json()
return jsonData;
}catch(err){
console.error(err)
}
}
export default function App() {
const [randomUserDataJson,setRandomUserDataJson] = useState('')
useEffect( () => {
responseData().then(randomdata => {
setRandomUserDataJson(randomdata || 'not found')
})
}, []);
return (
<div >
<pre>
<p>{randomUserDataJson}</p>
</pre>
</div>
);
}
Выход
not found
Комментарии:
1. вы пробовали const jsonData = ждать ответа.json(), попробуйте это: const jsonData = ждать ответа.данные.json()
Ответ №1:
Вы можете напрямую вернуть axios
ответ, ничего, кроме обещания, и получить доступ к результату с помощью then
метода.
import axios from "axios";
import { useEffect, useState } from "react";
import "./styles.css";
export default function App() {
const [randomUserDataJson, setRandomUserDataJson] = useState("");
useEffect(() => {
responseData().then((randomdata) => {
const data = JSON.stringify(randomdata.data);
setRandomUserDataJson(data || "not found");
});
}, []);
return (
<div>
<pre>
<p>{randomUserDataJson}</p>
</pre>
</div>
);
}
const responseData = async () => {
try {
const response = await axios.get("https://randomuser.me/api");
return response;
} catch (err) {
console.error(err);
}
};
codesandbox — https://codesandbox.io/s/withered-bush-iicqm?file=/src/App.js
Ответ №2:
Вам не нужно этого делать const jsonData = await response.json()
, axios десериализует ответ на объект JS для вас. Просто удалите эту строку, и это сработает. Кроме того, вы не можете отображать объект JS как дочерний элемент компонента React, поэтому он должен быть строковым.
import axios from 'axios';
import { useState, useEffect } from 'react';
const responseData = async () => {
try{
const response = await axios.get('https://randomuser.me/api')
console.log(response) // console object
return response;
}catch(err){
console.error(err)
}
}
export default function App() {
const [randomUserDataJson,setRandomUserDataJson] = useState('')
useEffect( () => {
responseData().then(randomdata => {
setRandomUserDataJson(randomdata || 'not found')
})
}, []);
return (
<div >
<pre>
<p>{JSON.stringify(randomUserDataJson, null, 2)}</p>
</pre>
</div>
);
}