
ํ๋ฉด์ ๋ณด์ฌ์ง๊ฒ ํ๊ธฐ => Renderingํจ์๋ก ๋ง๋ค์ด์ง ์ปดํฌ๋ํธ๋ฅผ html ํ๊ทธ ์ฌ์ฉํ๋ฏ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ ์ด ๋ฐฉ์ => JSX์ด๋ ๊ฒ ๋ณํ๋ ๊ฐ๋ฅํ๋ค.HTML์ ํ์ JS โ JSX!pํ๊ทธ ์์ {}์ค๊ดํธ๋ก js ๊ฐ ๊ฐ์ ธ์จ๋ค!style์ด๋ผ๋ ์คํ์ผ ๊ฐ์ฒด๋ฅผ ๋ณ์๋ก ๋ง
props๋ ๋ฐ๋์ ์์์ ์๋ ๋ฐฉํฅ์ผ๋ก ํ๋ฅธ๋ค. ์ฆ, ๋ถ๋ชจ โ ์์ ๋ฐฉํฅ์ผ๋ก๋ง ํ๋ฅธ๋ค(๋จ๋ฐฉํฅ).props๋ ๋ฐ๋์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ทจ๊ธํ๋ฉฐ, ๋ณ๊ฒฝํ์ง ์๋๋ค.props๋ object literal(={key: โvalueโ} ๋ฐ์ดํฐ) ํํ์ด๊ธฐ ๋๋ฌธ์ {props.mot

๋ฆฌ์กํธ์์ ๋ ๋๋ง์ด๋, ์ปดํฌ๋ํธ๊ฐ ํ์ฌ props์ state์ ์ํ์ ๊ธฐ์ดํ์ฌ UI๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์ฑํ ์ง ์ปดํฌ๋ํธ์๊ฒ ์์ฒญํ๋ ์์ ์ ์๋ฏธ. โ๏ธ ๋ ๋๋งโ๏ธ ๋ฆฌ๋ ๋๋ง โ๏ธ DOM(๋ช ๋ นํ ํ๋ก๊ทธ๋๋ฐ) โ๏ธ ๋ฆฌ์กํธ(์ ์ธํ ํ๋ก๊ทธ๋๋ฐ)ํธ๋ฆฌ์ ์์ ํ๋ํ๋๋ฅผ โ๋ ธ๋โ๋ผ๊ณ ํ๊ณ

useEffect = Hook์ด๋ค ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ๋ณด์ฌ์ก์ ๋ ๋ด๊ฐ ๋ฌด์ธ๊ฐ๋ฅผ ์คํํ๊ณ ์ถ๋ค๋ฉด? ๋๋ ์ด๋ค ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ก์ ๋ ๋ฌด์ธ๊ฐ๋ฅผ ์คํํ๊ณ ์ถ๋ค๋ฉด? useEffect๋ฅผ ์ฌ์ฉํฉ๋๋ค.import React, { useEffect } from "react"
RTK๋ Redux Toolkit์ ํจํค์ง๋ก, React์ Redux๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ํ๋ก์ ํธ์์ Redux๋ฅผ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค.RTK์ ๋ค์ํ ๊ธฐ๋ฅ์ ํ์ฉํด Redux ์ฝ๋๋ฅผ ๋์ฑ ๊ฐ๊ฒฐํ๊ณ ํจ์จ์ ์ผ๋ก ์์ฑ ๊ฐ๋ฅ.

โ๏ธ React Router DOM: ํ์ด์ง ์ด๋์ ๊ตฌํํ ์ ์๊ฒ ํด์ฃผ๋ ํจํค์งHome, About, Contact, Works๋ธ๋ผ์ฐ์ ์ ์ฐ๋ฆฌ๊ฐ URL์ ์ ๋ ฅํ๊ณ ์ด๋ํ์ ๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ํ์ด์ง ์ปดํฌ๋ํธ๋ก ์ด๋ํ๊ฒ๋ ๋ง๋๋ ๋ถ๋ถ. URL 1๊ฐ๋น ํ์ด์ง ์ปดํฌ๋ํธ๋ฅผ

useParams ์ path์ ์๋ id ๊ฐ์ ์กฐํํ ์ ์๊ฒ ํด์ฃผ๋ ํ ํ์ด์ง ์ปดํฌ๋ํธ๋ฅผ ๋ชจ๋ ๋์ผํ๊ฒ ๋ ๋๋งํ์ง๋ง useParams์ ์ด์ฉํ๋ฉด ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋๋ผ๋ ๊ฐ๊ฐ์ ๊ณ ์ ํ id ๊ฐ์ ์กฐํํ ์ ์๋ค. works/1๋ก ์ด๋ํ๋ฉด 1 ์ด๋ผ๋ ๊ฐ์ ์ฃผ๊ณ

BaaS๋ ์น๊ณผ ๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ์ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ํ ์ ์๋๋ก ๋์์ฃผ๋ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ์ ๋ฐฑ์๋ ์๋น์ค๋๋๋ค. BaaS๋ฅผ ์ด์ฉํ๋ฉด ๋ณต์กํ ๋ฐฑ์๋ ์์คํ ์ ์ง์ ๊ด๋ฆฌํ์ง ์์๋okํ๋ก ํธ์๋: ์ฌ์ฉ์๊ฐ ๋ณด๊ณ ์ํธ์์ฉํ๋ ๋ฉด์ด์ฃ . ์น ์ฌ์ดํธ์ ๋ชจ๋ ์๊ฐ์ ์์๋ฅผ ๋ด๋นํด์.๋ฐฑ์๋
๋จ์ฐ ๊ฐ์ฅ ํท๊ฐ๋ฆฌ๊ณ ๊ธฐ์ค ์ธ์ฐ๊ธฐ ์ด๋ ต๋ค๊ณ ๋จธ๋ฆฌ ์ธ๋งฌ ๋ฆฌํฉํ ๋ง ์ผ๋ช 'ํ์ผ ์ธ๋ถํํ๊ธฐ'๋ฅผ ํด๋ณด์๋ค.์ผ๋จ ๊ธฐ์กด ํ์ผ์ src/component/TodoList.jsx ํ๋์ App.jsx์ file tree.์ด์ component ํด๋ ์๋ TodoContainer - ์
Vite ํ๋ก์ ํธ ์์ฑ:ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ๋ก ์ด๋:React-Redux ๋ฐ Redux Toolkit ์ค์น:(ํ์ ์) ๋ชจ๋ ์์กด์ฑ ์ค์น:๊ฐ๋ฐ ์๋ฒ ์คํ:โ Vite ๊ธฐ๋ฐ์ React ํ๋ก์ ํธ์์ Redux๋ฅผ ์ฌ์ฉํ์ฌ ์ํ ๊ด๋ฆฌ ๊ฐ๋ฅ.
forEach๋ฐฐ์ด์ ๊ฐ ์์์ ๋ํด ์ฃผ์ด์ง ์ฝ๋ฐฑ ํจ์๋ฅผ ์คํํฉ๋๋ค. ๋ฐํ ๊ฐ์ด ์๊ณ , ๋จ์ํ ๋ฐฐ์ด์ ์ํํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.์ฌ์ฉ๋ฒ:filter์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์๋ง ๊ฑธ๋ฌ๋ด์ด ์๋ก์ด ๋ฐฐ์ด๋ก ๋ฐํํฉ๋๋ค.์ฌ์ฉ๋ฒ:reduce๋ฐฐ์ด์ ํ๋์ ๊ฐ์ผ๋ก ์ค์ด๊ธฐ ์ํด ๋์ ๊ฐ์ ๊ณ์ฐํฉ๋๋ค
handleSubmit(e):ํผ ์ ์ถ ์ ์คํ๋๋ ํจ์๋ก, e.preventDefault()๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ๋์(์๋ก๊ณ ์นจ)์ ๋ง๊ณ ์ ๋ ฅ๊ฐ์ ์ฒ๋ฆฌํฉ๋๋ค.handleChange(e):์ ๋ ฅ ํ๋์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ์คํ๋๋ฉฐ, e.target.value๋ก ๋ณ๊ฒฝ๋ ๊ฐ์ ๊ฐ์ ธ์

React ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ปดํฌ๋ํธ ๊ฐ์ ๋ฐ์ดํฐ ์ ๋ฌ๊ณผ ์ํ ๊ด๋ฆฌ๋ ๋งค์ฐ ์ค์ํ ์์์ ๋๋ค. ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ์ปดํฌ๋ํธ์ ์ญํ ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ๊ณ , ๊ฐ ์ปดํฌ๋ํธ๊ฐ ํน์ ํ ์ญํ ์ ์ถฉ์คํ๋๋ก ์ค๊ณํ ํ์๊ฐ ์์ต๋๋ค.Form ์ปดํฌ๋ํธ (TodoForm)์ฌ์ฉ์๊ฐ
&& ์ฐ์ฐ์๋ JavaScript์์ "๋ ผ๋ฆฌ AND" (Logical AND) ์ฐ์ฐ์๋ก, ๋ ๊ฐ์ ํํ์์ ํ๊ฐํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ์ฐ์ฐ์๋ ๋ ํํ์์ด ๋ชจ๋ true์ผ ๋๋ง true๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.๋ ๊ฐ ๋ชจ๋ ์ฐธ์ผ ๋๋ง ์ฐธ์ ๋ฐํ
์ฟผ๋ฆฌ์คํธ๋ง์ URL์ ๋์ ๋ถ์ด์, ์๋ฒ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์ญํ ์ ํฉ๋๋ค. ์ฃผ๋ก ๋ฌผ์ํ(?) ๋ค์ ์ค๋ ๋ถ๋ถ์ ๊ฐ๋ฆฌํค๋ฉฐ, ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ด ์์ ๊ฒฝ์ฐ์๋ &๋ก ๊ตฌ๋ถ๋ฉ๋๋ค.์๋์ ๊ฐ์ URL์ ์๊ฐํด๋ณผ๊ฒ์:https://example.
๐ JWT = ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด ์๋ฒ์์ ๋ฐ๊ธํ๋ ํ ํฐ๋ค, ์ ํํ ๋งํ๋ฉด JWT (JSON Web Token)์ ํด๋ผ์ด์ธํธ ์ธก(์: ๋ธ๋ผ์ฐ์ )์์ localStorage๋ sessionStorage์ ์ ์ฅํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค. ์ด๋ ๊ฒ ์ ์ฅ๋ JWT๋ฅผ ์ฌ์ฉํ
Repository.git์๋ git clone ์ฃผ์๋ฅผ ๋ฃ์ด์ค๋คgit clone์ ํ๊ณ ๋๋ฉด xxx.git ์ด๋ผ๋ ๋๋ ํ ๋ฆฌ๊ฐ ๋ํ๋๋๋ฐ ์ด๋ฆ์ .git์ผ๋ก ๋ฐ๊ฟ์ค๋ค์ ๋ ํ์งํ ๋ฆฌ์ git ์ฃผ์๋ฅผ ์ฐ๊ฒฐํ๋คpush ํด์ฃผ๋ฉด ๋!
Zustand๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ ํจํค์ง๋ฅผ ์ค์นํด์ผ ํด์.Zustand ์คํ ์ด๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๊ณณuser: ์ ์ ์ ๋ณด๋ฅผ ๋ด๋ ์ํ์์. ์ฒ์์๋ ์๋ฌด ์ ์ ์ ๋ณด๋ ์๊ธฐ ๋๋ฌธ์ null๋ก ์ด๊ธฐํํ์ด์.setUser: ์ ์ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํ๋ ํจ์์์. ์ ์ ๊ฐ ๋ก๊ทธ์ธํ ๋

Zustand๋ฅผ ์ฌ์ฉํ ๋ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํ store ์์ฑstore๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด useUserStore ํ ๋ฃ๊ธฐ์ํ์ ๋ถ๋ฅ์ ์ญํ user ์ํ:์ญํ : ๋ก๊ทธ์ธ๋ ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ID, ๋๋ค์, ํ๋กํ ์ฌ์ง ๋ฑ์ ์ ๋ณด๋ฅผ ๋ด์ต๋๋ค.
ํ๋ก์ ํธ ์งํ ์ค, ๋ก๊ทธ์ธ/ํ์๊ฐ์ ํ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ ๊ณผ์ ์์ ๋ ๊ฐ์ง ์๋ก ๋ค๋ฅธ ์ ๋ณด(user์ userInfo)๋ฅผ ํผ๋ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. user: ํ์๊ฐ์ ๋๋ ๋ก๊ทธ์ธ ์ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์ ์ญ ์ํ(AuthContext)์ ์ ์ฅํ์ฌ

Tailwind CSS๋ฅผ ํ๋ก์ ํธ์ ์ค์นํ๊ณ ์ค์ ํฉ๋๋ค.โtailwind.config.js ํ์ผ์ ์ด๊ณ content ๋ฐฐ์ด์ Tailwind๊ฐ ์ฌ์ฉํ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ง์ ํฉ๋๋ค:โsrc/index.css ํ์ผ ์ต์๋จ์ ๋ค์ ๋ด์ฉ์ ์ถ๊ฐํฉ๋๋ค:๐ ์ฐธ๊ณ - Tailwind

useEffect hook์ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋ ๋น๋๊ธฐ ์์ฒญ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ํ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ ์ค๋ณต๋ ์ฝ๋๊ฐ ์ปดํฌ๋ํธ๋ง๋ค ๋์ผํ ๋น๋๊ธฐ ๋ก์ง์ ๋ฐ๋ณตํด์ ์์ฑ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌ ๋ถ์กฑ๋น์ฆ๋์ค ๋ก์ง๊ณผ UI ๋ก์ง์ด ํผํฉ์๋ฒ ์ํ ๊ด๋ฆฌ์ ์ด๋ ค์