ํ๋ก์ ํธ ์์ฑNext.js ํ๋ก์ ํธ ์์ฑnpx create-next-app@latest์์ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ ํ ํ์ํ ์ต์ ์ ์ ํ ํ ํ๋ก์ ํธ ์์ฑ! ์์ฑํ ํ๋ก์ ํธ๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ react ์ ๋์ผํ๋ค. yarn dev ๋ฅผ ์ ๋ ฅํด ์ฃผ๋ฉด ๋๋ค! ๋ ์ด์์ ์ค์ ๋ด๊ฐ ๋ง๋ค ํ์ด์ง๋ ๋ชจ๋ ํ์ด์ง์ ๊ณตํต์ผ๋ก ์๋ ๋ ์ด์์์ด ํ์ํ๊ณ ๊ทธ ๋ ์ด์์์ ํ์ด์ง๋ฅผ ์ด๋ํ๋ ๋งํฌ๊ฐ ํ์ํ๋ค. root ์ layout.tsximport type { Metadata } from "next";import "./globals.css";import Link from "next/link";export const metadata: Metadata = { title: "Create Next App", description:..
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ์ค ํ๋กํ ์กฐํ์์ ๊ฐ์๊ธฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ค๋ฅ๋คํธ์ํฌ ํญ์์ ํ์ธํ ์ค๋ฅ ์์ธ์ ํ ํฐ ๋ง๋ฃ ์ด์..! ํ ํฐ ๋ง๋ฃ ์๊ฐ์ ํ์ธํด ๋ณด๋.. 1์๊ฐ์ธ ๊ฒ์ ํ์ธํ๋ค... ํด๊ฒฐ ๊ณผ์ ...์ฐ์ ๋น ๋ฅธ ํ ์คํธ๋ฅผ ์ํด ํ ํฐ์ 1๋ถ์ง๋ฆฌ ๋ฐ๊ธํ๋๋ก ํ๋ค.export const login = async (userData) => { return await authInstance.post("/login?expiresIn=1m", userData);}; ์ฒ์ ์๊ฐํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์๋ต์ด status ๊ฐ 401 ์ธ ๊ฒฝ์ฐ ๋ก๊ทธ์์ ์ฒ๋ฆฌํ๊ณ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋๋ฆฌ๋ฉด ๋๊ฒ ์ง ํ๋๋ฐ, ๋ค๋ฅธ ์ค๋ฅ๋ ๋ค 401์ ์ฃผ๊ณ ์์๋ค.๊ทธ๋ฌ๋ฉด ์๋ต์ผ๋ก "ํ ํฐ์ด ๋ง๋ฃ๋์์ต๋๋ค. ๋ค์ ๋ก๊ทธ์ธ ํด์ฃผ์ธ์." ๋ผ๋ ๋ฉ์ธ์ง๋ฅผ ์ฃผ๊ณ ์์ผ..
props drilling ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ฝ๋๋ฅผ Context ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌํฉํ ๋งํด ๋ณด๋ ค ํ๋ค. Context API ์ฌ์ฉ ์ ๊ตฌ์กฐ์๋ ์ด๋ฏธ์ง๋ ๋ฆฌํฉํ ๋ง ์ props drilling ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ปดํฌ๋ํธ ๊ตฌ์กฐ์ด๋ค. Dashboard ์์ ์ฌ์ฉํ์ง ์๋ removedPokemon ์ PokemonCard ๋ฅผ ์ํด์ props ๋ก ์ ๋ฌํด ์ฃผ๊ณ ์๋ค. ๋ํ PokemonList ์์ ์ฌ์ฉํ์ง ์๋ addPokemon ์ props ๋ก ์ ๋ฌํด ์ฃผ๊ณ ์๋ค. ์ด ํ๋ก์ ํธ๋ ๊ฐ๋จํ ๊ตฌ์กฐ๋ก ๋์ด์์ด์ ์ถฉ๋ถํ props drilling ๋ฐฉ์์ผ๋ก ํ์ํ ์ ๋ณด๋ฅผ ์ ๋ฌํด ์ค๋ ๊ด์ฐฎ๊ฒ ์ง๋ง ๋ง์ฝ ์ปดํฌ๋ํธ๊ฐ ๋ช๋ฐฑ ๊ฐ ๋๋ฉด props ๋ฅผ ์ ๋ฌ ์ ๋ฌ ์ ๋ฌ.... ํด์ผ๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ํด์ํ๊ธฐ ์ํด Context ๋ฅผ ์ฌ์ฉํด..
์ฃผ์ด์ง ํฌ์ผ๋ชฌ ์ค์์ ์ํ๋ ํฌ์ผ๋ชฌ์ ์ถ๊ฐํ ์ ์๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ ์๋ค. ํฌ์ผ๋ชฌ์ ์ด 6๊ฐ๋ฅผ ์ ํํ ์ ์๊ณ ํฌ์ผ๋ชฌ 3๊ฐ๋ฅผ ์ ํํ์ผ๋ฉด 3๊ฐ์ ํฌ์ผ๋ชฌ์ด ๋ณด์ด๊ณ ์ ํํ์ง ์์ 3๊ฐ๋ ๊ธฐ๋ณธ ์ด๋ฏธ์ง๊ฐ ๋ณด์ฌ์ผ ํ๋ค. ์ ํํ 3๊ฐ์ ์ ํํ์ง ์์ ๊ธฐ๋ณธ ์ด๋ฏธ์ง๊ฐ ํ ๋ฒ์ ๋ ๋๋ง์ด ์ด๋ฃจ์ด์ ธ์ผ ํ๋๋ฐ, ์ด ๋ ๋๋ง ๋ฐฉ์์ ์ด๋ป๊ฒ ํด์ฃผ์ด์ผ ํ ์ง ๊ณ ๋ฏผํ ๊ฒ์ ์ ๋ฆฌํด ๋ณด๋ ค๊ณ ํ๋ค. ์ฒ์ ์ ๊ทผ ๋ฐฉ์๊ณผ ์ด์์ฒ์ ์๊ฐํ ๋ฐฉ์์ useState ์ด๊ธฐํ๋ฅผ ํฌ๊ธฐ๊ฐ 6์ธ ๋ฐฐ์ด๋ก ๋ง๋ค์ด๋ฒ๋ฆฌ๊ธฐ ์๋์ ๊ฐ์ด ๊ฐ๊ฐ์ ์์๋ฅผ null ๋ก ์ด๊ธฐํํ ํฌ๊ธฐ๊ฐ 6์ธ ๋ฐฐ์ด์ useState ๋ก ์ค์ ํ์๋ค. (๋น์์ ์ด๊ฒ ์ต์ ์ด๋ผ๊ณ ์๊ฐํจ)ํ์ง๋ง ์ด๋ ๊ฒ ํด๋ฒ๋ฆฌ๋๊น ์ฌ์ํ ๋ฌธ์ ์ ๋ค์ด ๋ฐ์ํ๊ธฐ ์์ํ๋ค. ๐ const [selectedPokemon, s..
๋ด์ผ๋ฐฐ์์บ ํ์์ ์งํํ ๋ ๋ฒ์งธ ํ ํ๋ก์ ํธ๊ฐ ๋๋ฌ๋ค. ์ด๋ฒ ํ๋ก์ ํธ๋ ๊ฐ์ธํ๋ก์ ํธ๋ก ์งํํ๋ ์ํ ๊ฒ์ ์ฌ์ดํธ๋ฅผ ๊ณ ๋ํํ๋ ๊ฒ์ด์๋ค. ์ด๋ฒ ํ๋ก์ ํธ๋ก ๋ฐฐ์ด ๊ฒ์ด ๋ง๊ธฐ์ ์ค๋๋ KTP ํ๊ณ ๋ฅผ ์์ฑํด ๋ณด๋ ค ํ๋ค. ๐ฅณ ํ๋ก์ ํธ ๊ฒฐ๊ณผ๋ฌผ ๋ฐฐํฌ ๋งํฌ๋ฐฐํฌ๋งํฌ๊นํ๋ธ ์ฃผ์ Keep์ง๋๋ฒ ํํ๋ก์ ํธ ์์ ์์ฌ์ ๋ ๋ถ๋ถ์ ๋ถ์ํด์ ์ด๋ฒ ํ๋ก์ ํธ์์๋ ๋ณด์ํ์ฌ ์งํํ๋ค. ์ฒซ ๋ฒ์งธ, ํ๋ก์ ํธ ํ๊ฒฝ ๊ตฌ์ฑ์ ๋ฏธ๋ฆฌ ์ ํ๊ณ ์งํํ ์ ์ด ์ข์๋ค. ์ง๋๋ฒ์๋ ํ๋ก์ ํธ ํด๋ ๊ตฌ์กฐ์ ์ฝ๋ฉ์ปจ๋ฒค์ ๋ฑ์ ์ ํด๋์ง ์์์๋ค. ์ด ๋ถ๋ถ์ ์ด๋ฒ ํ ํ๋ก์ ํธ์์๋ ํ์๋ถ๋ค๊ณผ ๊ฐ๋ฐ ์์ ์ ์ ๋จผ์ ์์ํ๊ณ ๊ตฌ์กฐ๋ฅผ ์ก์๋๊ณ ์งํํ๋ค. ํ์คํ ์ด๋ ๊ฒ ํ๋๊น ํ๋ก์ ํธ ๊ตฌ์กฐ๊ฐ ํ๋์ ๋ณด์ฌ์ ํ์ผ ์ฐพ๊ธฐ๋ ์ฌ์ ๊ณ , ๊ฐ ํด๋์ ํ์ผ์ด ์ด๋ค ์ญํ ์ ํ๋์ง ๋ช ํํ๊ฒ..
์ํ ๊ฒ์ ์ฌ์ดํธ๋ฅผ ๊ฐ๋ฐํ๋ฉด์ ๋ฐ์ํ๋ ์์ํ ์ด์์ ํด๊ฒฐ๋ฐฉ๋ฒ๋ค์ ์ ๋ฆฌํด๋ณด๋ คํ๋ค. ๋ฆฌ๋ทฐ ์ด์์๋ก๊ณ ์นจ ๋ฑ๋ก, ์ญ์ , ์์ ์ ํ ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ๊ธฐ ์ํด์ ํ๋ฉด์ ์๋ก๊ณ ์นจํ๋๋ก ํ๋ค. ์๋๋ ์์ ๋ฒํผ ํด๋ฆญ์ค ๋ฐ์ํ๋ ์ด๋ฒคํธ์ด๋ค. ์์ ์ด ์๋ฃ๋ ํ ์๋ก๊ณ ์นจ์ ํ์ฌ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ด๋๋ก ํ๋ค. ๊ทธ๋ฌ๋ ๋๋ฌด ๋๋๊ณ ๊น๋นก์ด๋ ํ์์ด ๋ณด๊ธฐ ๋ถํธํด์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๋ ๊ณ ๋ฏผํ๋ ์ค, DOM ์ ์ง์ ์์ ํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒ์ ์์๋ค.saveUpdateButton.addEventListener('click', async () => { if (window.confirm('์ ๋ง๋ก ์ด ๋ฆฌ๋ทฐ๋ฅผ ์์ ํ์๊ฒ ์ต๋๊น?')) { const updatedContent = reviewItem.que..
- Total
- Today
- Yesterday