👩🏫 이제 Next.js에서 공식적으로 알려주는 두 가지 CSR 구현 방법을 알아봅시다!
useEffect()
사용하기useEffect()
훅을 페이지 내부에 사용한다.import React, { useState, useEffect } from "react";
export function Page() {
const [data, setData] = useState(null);
useEffect(() => {
const fetchData = async () => {
const response = await fetch("https://api.example.com/data");
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const result = await response.json();
setData(result);
};
fetchData().catch((e) => {
// handle the error as needed
console.error("An error occurred while fetching the data: ", e);
});
}, []);
return <p>{data ? `Your data: ${data}` : "Loading..."}</p>;
}
Loading...
을 보여주면서 렌더링 과정을 시작한다.SWR
과 같은 data-fetching 라이브러리를 사용한다.👩🏫 공식적으로 권장되는 방식입니다!
npm i swr
로 설치하여 사용할 수 있다.useSWR
import useSWR from "swr";
const fetcher = (url: string) => axios.get(url);
function Profile() {
const { data, error, isLoading } = useSWR("/api/url", fetcher, {// option});
if (error) return <div>failed to load</div>;
if (isLoading) return <div>loading...</div>;
return <div>hello {data.name}!</div>;
}
useSWR(key, fetcher)
{data, isLoading, error}
값을 반환한다.revalidate, mutate, initialData
등의 값을 넣어줄 수 있다.useSWR
과 함께 Next.js에서 CSR 구현하기import useSWR from "swr";
export function Page() {
const { data, error, isLoading } = useSWR(
"https://api.example.com/data",
fetcher
);
if (error) return <p>Failed to load.</p>;
if (isLoading) return <p>Loading...</p>;
return <p>Your Data: {data}</p>;
}
revalidate
를 진행한다.🤔 어떻게 동작하나요?