NextJS의 API에서 데이터를 가져오는 가장 간단한 방법
시작하기 전에
먼저 다운로드
npm i axios
악시오스란 무엇인가?
NextJS 및 가져오기
NextJS에서는 가져오기 API를 사용하여 API에서 데이터를 가져옵니다.
그러나 서버 측 렌더링에서는 구성 요소의 데이터를 직접 사용할 수 없으며 useState 및 useEffect로 상태를 관리해야 합니다.
갑시다 ?
먼저 api의 URL을 얻은 다음 저장하십시오.
const url = "https://catfact.ninja/fact";
그런 다음 api에서 데이터 가져오기를 시작하겠습니다.(YOU HAVE TO INSTALL AXIOS 😬 !!)
## fetch data
// fetch data .
function getData() {
axios
.get(url)
.then((res) => {
//put the resulted data in the console for testing purposes
console.log(res.data);
setRepo(res.data);
})
//handle the error
.catch((err) => {
console.log(err);
});
}
const url = "https://catfact.ninja/fact";
## fetch data
// fetch data .
function getData() {
axios
.get(url)
.then((res) => {
//put the resulted data in the console for testing purposes
console.log(res.data);
setRepo(res.data);
})
//handle the error
.catch((err) => {
console.log(err);
});
}
구성 요소에 넣으십시오.
좋았어 하? 😏
이것은 빈 구성 요소입니다
export default function Home() {
return (
<div>
<h1></h1>
</div>
);
};
데이터를 관리할 상태를 만듭니다.
- we will use the useState hook to manage the data.
- we will use the useEffect hook to manage the status.
- why tho ? cuz it's a server side rendering you can't handle a client side operations there .
or you will face errors like :
```
Hydration failed because the initial UI does not match what was rendered on the server.
```
또는
Text content does not match server-rendered HTML.
useEffect(() => {
let interval = setInterval(() => {
getData();
setLoading(!loading);
setDot(dota);
setEmoji(emojia);
}, 5000);
여기서는 간격을 사용하여 5초마다 데이터를 가져왔습니다.
상태를 업데이트하고 반환하려는 모든 함수를 넣습니다.(하지만 아직 반환되지 않음)
기능
// to get a rendom number of dots
function dot() {
return dots[Math.floor(Math.random() * dots.length)];
}
// to get a rendom number of emojis
function emoji() {
return emojiArray[Math.floor((Math.random() * emoji.length) / 2)];
}
// and we have setLoading state to display a simple text when the data is not loaded yet.
// and of course we have getData .(the data itself)
그래서 모두 합치면 결과를 얻을 수 있습니다 😍 .
이제 당신이 원하는 것을 위해 😏
소스 코드
또는 이것을 복사하십시오 :
import styles from "../styles/Home.module.css";
import axios from "axios";
import { useState, useEffect } from "react";
export default function Home() {
let [repo, setRepo] = useState([]);
let [loading, setLoading] = useState(true);
let [dota, setDot] = useState([]);
let [emojia, setEmoji] = useState([]);
const url = "https://catfact.ninja/fact";
// fetch data .
function getData() {
axios
.get(url)
.then((res) => {
console.log(res.data);
setRepo(res.data);
})
.catch((err) => {
console.log(err);
});
}
function dot() {
return dots[Math.floor(Math.random() * dots.length)];
}
function emoji() {
return emojiArray[Math.floor((Math.random() * emoji.length) / 2)];
}
// put it inside useEffect hook .
useEffect(() => {
let interval = setInterval(() => {
getData();
setLoading(!loading);
setDot(dota);
setEmoji(emojia);
}, 5000);
return () => clearInterval(interval);
}, [loading]);
const emojiArray = [
"😍",
"🥰",
"😘",
"😗",
"😙",
"😚",
"😋",
"😛",
"😝",
"😜",
"🤪",
"😏",
"😒",
"😞",
"😔",
"😟",
"😕",
"🙁",
"☹️",
"😖",
"😫",
"😩",
"🥺",
"😢",
"😭",
"😤",
"😠",
"😡",
"🤬",
"🤯",
"😳",
"🥵",
"🥶",
"😱",
"😨",
"😰",
"😥",
"😓",
"🤗",
"🤔",
"🤭",
"🤫",
"🤥",
"😶",
"😐",
"😑",
"😬",
];
const dots = ["...", "..", "."];
return (
<div data-reactroot='' className={styles.text}>
<h3 className={styles.h3}>Featched Data {emoji()}</h3>
<h1>New fact every 5 sec </h1>
<h4>{!repo.fact ? "loading ..." : repo.fact}</h4>
<h6 style={{ color: "#F0F8FF", fontSize: "15px" }}>
{repo.fact ? "Loading new one " : ""}
{dot()}
</h6>
</div>
);
}
멋진 하루 되세요 🥰 .
Reference
이 문제에 관하여(NextJS의 API에서 데이터를 가져오는 가장 간단한 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/hamdysaad20/the-simplest-way-to-fetch-data-from-apis-in-nextjs-31hg
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(NextJS의 API에서 데이터를 가져오는 가장 간단한 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hamdysaad20/the-simplest-way-to-fetch-data-from-apis-in-nextjs-31hg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)