#javascript #reactjs #api
Вопрос:
import React from 'react';
const url = 'https://randomuser.me/api/?results=10'
async function List() {
const data = await fetch (url)
const response = await data.json()
return (
<div>
{response.map((item)=>(
<div>{item.results[1].name.first}</div>
))}
</div>
)
}
Он также выдает следующее: Вышеуказанная ошибка произошла в компоненте:
at List
at div
at App
Подумайте о добавлении границы ошибки в дерево, чтобы настроить поведение обработки ошибок.
Посещение https://reactjs.org/link/error-boundaries чтобы узнать больше о границах ошибок.
Комментарии:
1. прочитайте документы о выполнении http — запросов в react
2. «Вышеуказанная ошибка» — не могли бы вы показать нам и эту ошибку тоже?
3. Это было решено, большое спасибо, братан.
Ответ №1:
Если вы работаете с functional
компонентом. Вам нужно использовать React hooks
для вызовов API. Вы можете использовать useEffect
крючки для вызова API.
Пример:
const { useState } = React;
function useFetchData() {
const [data, setData] = React.useState([]);
React.useEffect(() => {
return fetch("https://randomuser.me/api/?results=10")
.then((response) => response.json())
.then((responseJson) => {
setData(responseJson.results);
})
.catch((error) => {
console.error(error);
});
}, []);
return { data };
}
function App() {
const { data } = useFetchData();
return (
<div id="quote-box">
{data.map((item) => (
<div>{item.name.first}</div>
))}
</div>
);
}
ReactDOM.render(
<App />,
document.getElementById('react')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
<div id="react"></div>
Комментарии:
1. Спасибо за это, действительно полезно.
Ответ №2:
Вызов API внутри компонента является побочным эффектом, и React этого не хочет. Компоненты React ожидают, что вы предоставите данные и немедленно отобразите их. Если вы хотите вызвать API перед визуализацией компонента, используйте метод побочных эффектов, например useEffect()
, и вызовите этот API внутри лямбды. Теперь компонент знает, что есть ожидаемый побочный эффект, и будет повторно отображаться после обновления данных.
Комментарии:
1. Я использовал крючок useEffect и useState, затем IIFE, и это сработало. Спасибо, мужик