#javascript #reactjs #api #axios #next.js
Вопрос:
Я делаю запрос get к API в useEffect(). Когда я перехожу на страницу с главной страницы, она загружается нормально, но как только я обновляю страницу http://localhost:3000/coins/coin
, я получаю Unhandled Runtime Error: Error: Network Error
.
export async function getServerSideProps({ query }) { const id = query; return { props: { data: id }, }; } function index({ data }) { const coinURL = data.id; // bitcoin const apiEndpoint = `https://api.coingecko.com/api/v3/coins/${coinURL}`; const [currentUser, setCurrentUser] = useState(); const [coinData, setCoinData] = useState([]); useEffect(() =gt; { const getData = async () =gt; { const res = await axios.get(apiEndpoint); const { data } = res; setCoinData(data); }; const getCurrentUser = async () =gt; { const res = await axios.get( `http://localhost:5000/api/users/${session?.id}` ); const { data } = res; setCurrentUser(data); }; getData(); getCurrentUser(); }, [coinData, currentUser]); }
Почему это происходит?
Комментарии:
1. пожалуйста, поделитесь более подробным фрагментом кода, чтобы мы могли ответить на него. Вероятно, ваш
apiEndpoint
исходит от реквизита.2. Я использую getServerSideProps для получения параметра url. Затем передайте этот идентификатор в реквизит основной функции.
const apiEndpoint = https://api.coingecko.com/api/v3/coins/${coinURL}
Ответ №1:
Я рекомендую сделать что-то подобное:
const getData = async () =gt; { try { const res = await axios.get(apiEndpoint); const { data } = res; setCoinData(data); } catch(err) { console.log(err) } }; const getCurrentUser = async () =gt; { try { const res = await axios.get( `http://localhost:5000/api/users/${session?.id}` ); const { data } = res; setCurrentUser(data); } catch(err) { console.log(err) } }; useEffect(() =gt; { getData(); getCurrentUser(); }, [coinData, currentUser]);
если вы сделаете это, вы сможете просмотреть точную ошибку и исправить ее.
Комментарии:
1. Это, казалось, решало проблему само по себе. Хотя я немного не понимаю, почему… Это потому, что я определил функции вне эффекта использования, прежде чем вызывать их? или это просто потому, что была добавлена попытка поймать?
2. на самом деле теперь его ошибка регистрации прерывает запрос в бесконечном цикле, из-за чего firefox не отвечает