https://www.~ νμ΄μ§ μμ²μ΄ μ¨λ€.getServerSideProps ν¨μκ° μ€νλλ€.νμ΄μ§ μ»΄ν¬λνΈλ³΄λ€ λ¨Όμ μ€νλμ΄μ, μ»΄ν¬λνΈμ νμν λ°μ΄ν° λΆλ¬μ€λ ν¨μ
export const getServerSideProps = () => {}
νμΌ λ΄μ μ½μλ μ΄λ¦μ ν¨μ getServerSidePropsλ₯Ό λ§λ€μ΄ λ΄λ³΄λ΄λ©΄ (export), ν΄λΉ νμ΄μ§λ μλ² μ¬μ΄λ λ λλ§ λ°©μμ΄ μ μ©λλ€.
- console.log κ°μ μ½λλ₯Ό μμ±ν΄λ κ°λ°μ λꡬμμ νμΈ λΆκ° / ν°λ―Έλ λ‘κ·Έμμλ§ νμΈ κ°λ₯
- λΈλΌμ°μ μμλ§ λμνλ
window.location()κ°μ μ½λ μ λ ₯μ μλ¬ λ°μ (undefinedμ΄λ―λ‘)
export const getServerSideProps = () => {
const data = "..."
return {
props: {
data,
},
};
};
λ°λμ λ¨ νλμ νλ‘νΌν° propsλ₯Ό κ°μ§λ κ°μ²΄λ₯Ό 리ν΄ν΄μΌνλ€.
export default function Home(props: any) {
...
리ν΄ν κ°μ²΄λ νμ΄μ§ μ»΄ν¬λνΈμ Propsλ‘ λ°λλ€.
getServerSidePropsμ λ°νκ° νμ
μ μλμΌλ‘ μΆλ‘ νλ νμ
export default function Home(props: InferGetServerSidePropsType<typeof getServerSideProps>) {
...
export default function Home({ data }: any) {
console.log(data);
...
λ°λΌμ μ무 쑰건 μμ΄ window κ°μ κ±° μ¬μ©μ μλ¬κ° λ°μνλ€.
export default function Home({ data }: any) {
useEffect(() => {
console.log(window);
}, []);
λμ μμ μ΄ μ»΄ν¬λνΈ λ§μ΄νΈ μ΄νμ΄λ―λ‘ λΈλΌμ°μ μμλ§ λμνλ€.
import { BookData } from "@/types";
export default async function fetchBooks(): Promise<BookData[]> {
const url = `http://localhost:12345/book`;
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error();
}
return await response.json();
} catch (err) {
console.error(err);
return [];
}
}
fetch(), .json() λ±μ΄ λΉλκΈ°λ‘ μλνλ―λ‘ await μ¬μ©
await μ¬μ©νμΌλ―λ‘ ν¨μμ async μΆκ°
export default async function fetchBooks(q?: string): Promise<BookData[]> {
let url = `http://localhost:12345/book`;
if (q) {
url += `/search?q=${q}`;
}
...
쿼리 qκ° μλ κ²½μ°μλ§ /search?q=${q}λ₯Ό urlμ μΆκ°νκΈ°
export const getServerSideProps = async () => {
const allBooks = await fetchBooks();
const recoBooks = await fetchRandomBooks();
return {
props: {
allBooks,
recoBooks,
},
};
};
fetchBooks() μλ£ ν β fetchRandomBooks() μ€ν
μ΄ μ€ν μκ° = λ ν¨μ μ€ν μκ°μ ν©
λ°λΌμ fetchλ₯Ό 2λ² μ΄μ νλ κ²½μ°μλ μμ κ°μ΄ μ§λ ¬λ‘ μ²λ¦¬νλ κ²μ λΉν¨μ¨μ μ΄λ€.
Promise.all() : λΉλκΈ° ν¨μ μ¬λ¬ κ°λ₯Ό λ³λ ¬λ‘ μ€ννμ¬, λͺ¨λ μμ
μ΄ μλ£λ λκΉμ§ κΈ°λ€λ¦° ν νκΊΌλ²μ κ²°κ³Όλ₯Ό λ°ννλ€. κ°λ³ ν¨μκ° await μμ΄ μ€νλλ―λ‘, μ 체 μ€ν μλκ° λ¨μΆλλ€.
export const getServerSideProps = async () => {
const [allBooks, recoBooks] = await Promise.all([
fetchBooks(),
fetchRandomBooks(),
]);
return {
props: {
allBooks,
recoBooks,
},
};
};
λ ν¨μ fetchBooks() fetchRandomBooks() λμμ μ€ν
μ΅λ μ€ν μκ° = λ ν¨μ μ€ λ μ€λ 걸리λ κ²
getServerSideProps ν¨μμμ Next.jsκ° μ 곡νλ μμ² κ΄λ ¨ μ λ³΄κ° λ΄κΈ΄ κ°μ²΄
getServerSideProps ν¨μμ 첫 λ²μ§Έ λ§€κ°λ³μμ΄λ©°, νμ
μ΄ GetServerSidePropsContextμ΄λ€.
export const getServerSideProps = async (context: GetServerSidePropsContext) => {
const q = context.query.q; // μΏΌλ¦¬κ° κ°μ Έμ€κΈ°
const id = context.params!.id; // νλΌλ―Έν°μ id λΆλ¬μ€κΈ°
...
context.queryβ 쿼리 μ€νΈλ§ (ex:?q=bookβcontext.query.q)
context.paramsβ λμ κ²½λ‘ νλΌλ―Έν° (ex:/book/[id]βcontext.params.id)
context.reqβ μμ² κ°μ²΄ (Request Object) (headers,cookiesνμΈ κ°λ₯)
context.resβ μλ΅ κ°μ²΄ (Response Object) (μΊμ 컨νΈλ‘€ μ€μ κ°λ₯)