props๊ฐ ์์์๊ฒ ๋๊ฒจ์ฃผ๋ ๋จ๊ณ๊ฐ ๋๋จ๊ณ ์ด์๋ ๊ฒฝ์ฐ props drilling์ด ์ผ์ด๋ฌ๋ค๊ณ ํ๋ค.
props drilling์ ๊ณผ๋ํ์ง ์์ผ๋ฉด ๊ด์ฐฎ์ง๋ง, ๊ณผ๋ํ๊ฒ ์ด๋ฃจ์ด์ง๋ฉด ํด๋น props๊ฐ ์ด๋์ ๋ด๋ ค์ง๊ณ ์๋์ง ์ฐพ๋๊ฒ์ด ๊ต์ฅํ ๋ํดํด์ง๋ค.
๋ฐ๋ผ์ ์ต๋ํ drilling์ด ์์ผ์ด๋๊ฒ ํด์ฃผ์๋ ๊ฒ์ด ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์ ๋ฉด์์ ์ ๋ฆฌํ๋ค.
props drilling์ ๋ฐฉ์งํ๊ธฐ ์ํด์๋ global state๋ฅผ ์ด์ฉํ๋๊ฒ์ด ์ข๋ค.
emotion์ props๋ฅผ ๋์ง๊ธฐ์ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์
${ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด}
์ ์๊ฐํ๋ฉด ๋๋ค.
๋ฐฑํฑ ์์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ${}๋ฅผ ์ฌ์ฉํ๋ ๊ฑธ ์๊ฐํ๋ฉด ๋๋ค.
emotion์ผ๋ก props๋ฅผ ์ ๋ฌํ๋ ํ์ฉ๋ฒ์ ๋ฌด๊ถ๋ฌด์งํ๋ค
onClick ๋ฟ๋ง ์๋๋ผ onMouseOver / onMouseLeave ๋ฑ ํ๊ทธ์๋ on์ผ๋ก ์์๋๋ ์์ฑ์ด ์ ๋ง ๋ง๊ธฐ ๋๋ฌธ์!
true / false ๋ฟ๋ง ์๋๋ผ String, Number ํ์ ๋ ๋ชจ๋ ์ ๋ฌํ ์ ์๋ค.
ํน์ ์ํฉ์์ CSS ๋ณ๊ฒฝ์ ๋ชจ๋ emotion์ผ๋ก props ์ ๋ฌํ๋ ๊ฒ์ผ๋ก ๋ง๋ค ์ ์๋ค.
setState๋ ๋น๋๊ธฐ๋ก ์๋ ํ๋ค.
setState๊ฐ ๋๊ธฐ๋ก ์๋ํ๊ฒ๋๋ฉด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋ฐ๋ก๋ฐ๋ก ๋ ๋๋ง์ ํ๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์ด๋ค.
๋ฐ๋ผ์ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ ์์ ์ ์ฅ์์ ๋ชจ์๋์๋ค๊ฐ ์ฝ๋๋ฅผ ๋๊น์ง ์ฝ๊ณ ํจ์๊ฐ ๋๋๋ฉด ํ๋ฒ์ ๋ฐ๊ฟ์ ๋ ๋๋งํ๋ค.โ ๋ฆฌ๋ ๋๊ฐ ๋๋ ์ํฉ
- ์๋ก์ด props๊ฐ ๋ค์ด์ฌ ๋
- ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ๋
- ๊ฐ์ ์ ๋ฐ์ดํธ(forceUpdate)๊ฐ ์คํ๋ ๋
- state๊ฐ ๋ณ๊ฒฝ๋ ๋
โ setState์ ๋น๋๊ธฐ์ ํน์ฑ์์
์๋์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์์๋๋ ๊ฐ์?
export default function stateTest(){ const [value,setValue]=useState(0) const onClick = () => { setValue(value+1) setValue(value+1) setValue(value+1) } return ( <div className="App"> <button onClick={onClick}>+</button> <h1>{value}</h1> </div>); }
โ ์ ๋ต์ 1
์ด๋ setState๊ฐ ๋น๋๊ธฐ์ ํน์ฑ์ ๊ฐ๊ธฐ๋๋ฌธ์ด๋ค.
(๋๊ธฐ์ ์ผ๋ก ์๋ํ๋ค๋ฉด ์ฝ๋๋ฅผ ์ฝ๊ณ ๋ฐ๋ก ๋ด๋ ค๊ฐ์ ๋ 1์ ๋ํ๊ณ ๋ 1์ ๋ํด 3์ด ๋์์ ๊ฒ ์ด๋ค.)
- ์ค์ต
-> input์ฐฝ์ ์ ๋ ฅ์ ํ ๊ธ์์ฉ๋ง ์ ๋ ฅํ์ ๋ ๋ฒํผ์ ์คํ์ผ์ด ์ ์ฉ๋์ง ์๋ค๊ฐ, 1๊ธ์ ๋ ์ ๋ ฅํ๊ฒ ๋๋ฉด ๊ทธ๋์์ผ ๋ฒํผ์ ์๊น์ด ์ ํ์ง
์ด๋ ์ ๋ ฅํ ๋๋ง๋ค state๊ฐ ๋ฐ๋๊ณ ๋ฐ๋ state๋ก ํ๋ฉด์ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ณผ์ ์์ ๋ถ๋ชจ์์ ์ ์ฒด๊ฐ ๋ฆฌ๋ ๋ ๋๋ ์ํฉ์ธ ๊ฒ์ด๊ณ ์ฌ์ค์ ๋น๊ฐ์ธ๋ฐ ์ค์ ์ฐ๋ฆฌ ๋์์๋ document.getEelementById("")๊ฐ ์๋์คํ ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์
(use๋ก ๋ง๋ค์ด์ง ์ ๋ค์ ์ ์ธ -> memorization์ผ๋ก ์ต์ ํ ํด์ฃผ๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก ์์)<ํด๊ฒฐ๋ฐฉ๋ฒ>
-> writer, title,contents๋ก ๋น๊ต๋ฅผ ํ๋ฉด ์๋๋ค.
์์์ ๊ฒ์ฆํ ๋๋ ๊ทธ ๋ค์ด์จ ๊ฐ์ผ๋ก ๋น๊ต๋ฅผ ํด์ผ
๋ง์ง๋ง์ผ๋ก ํจ์๊ฐ ๋๋ ๋ ์ ๋ฐ์ดํธ๋ฅผ ํด์ค๋ค.
router.query ๊ฐ ๋ฐ๋์ ํ์ด์ง ์์์๋ง ์ฌ์ฉ๋๋๊ฑด ์๋๋ค.
๋ผ์ฐํฐ๊ฐ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ปดํฌ๋ํธ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๋ฐ๋ผ์ ํ์ด์ง ์ปดํฌ๋ํธ์์๋ ๊ฐ๋ฅํ์ง๋ง,
BoardDetail ์ปดํฌ๋ํธ์์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋คโ router ์ฌ์ฉ์ ์ฃผ์ํ ์
๋จ, ๋ผ์ฐํฐ๊ฐ ์๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฌ์ฉ ํ ๋๋ ๋ค์ด๋๋ฏน ๋ผ์ฐํ ํด๋[aaa]๊ฐ ์๋์ง ์ ํ์ธํ๊ณ ์ฌ์ฌ์ฉ ํด์ผํ๋ค.
ํด๋๊ฐ ์๋๊ณณ์ router.query๋ฅผ ๊ฐ์ง๊ณ ๊ฐ๋ฉด ์ค๋ฅ๊ฐ ๋จ๊ฒ ๋๋ค.
๋ํ, router.query๋ฅผ ์ฌ์ฉํ ๋๋
์ฝ์์ router.query๋ฅผ ์ฐ์ด๋ณด๊ณ ,
์์ ๋ญ๊ฐ ์๋์ง ํ์ธ ํ ํ์ํ ๊ฑธ ๊บผ๋ด์ ์ฌ์ฉํ์๋ ๊ฒ์ด ์ข๋ค.
1.
๊ฒ์๋ฌผ ๋ชฉ๋ก
: /boards
2.๊ฒ์๋ฌผ ๋ฑ๋ก
: /boards/new
3.๋ค์ด๋๋ฏน ๋ผ์ฐํ (ํน์ ๊ฒ์๋ฌผ ์กฐํ)
- /boards/: id โ :์ผ๋กํ๊ธฐ
- /borads/[id] โ [ ]์ผ๋ก ํ๊ธฐ
4.๊ฒ์๊ธ ์์ ํ๊ธฐ
- /boards/:id/edit
- /boards/[id]/edit
โ ์์ ์ ํน์ ๊ฒ์๋ฌผ์ ์์ ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํน์ ๊ฒ์๋ฌผ์
id๋ก ๋ค์ด๋๋ฏน ๋ผ์ฐํ ์ ํด์ค์ผ ํ๋ค.โ ์ค๋ฌด์์ ์ฌ์ฉํ๋ ๋ณ์, ํด๋ ๋ค์
์ค๋ฌด์์ ๋ณ์๋ช ์ด๋ ํด๋, ์ปดํฌ๋ํธ๋ช ์ ๋ง์๋๋ก ํ๊ฒ๋๋ฉด ๋ค๋ฅธ์ฌ๋์ด ์ฝ๋๋ฅผ ๋ณด๊ฒ๋์์๋ ์ด๋ค ๋ถ๋ถ์ธ์ง ์๊ธฐ ์ด๋ ค์.
์ค๋ฌด์์๋ ํด๋น ๋ณ์๊ฐ ๋ฌด์์ ์ํ ๋ณ์์ธ์ง, ํด๋น ์ปดํฌ๋ํธ๋ ํด๋๊ฐ ์ด๋ค ๋ถ๋ถ์ธ์ง ๋ช ์ํด์ผ ํ๋ค.// ์ซ์๋ฅผ ์นด์ดํธ ํ๋ ๋ณ์๋ฅผ ์ ์ธํ๊ธฐ let count; // ๋ ์ง ๊ด๋ จ ๋ณ์ ์ ์ธํ๊ธฐ let Date; //๋ฉ์ธ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ ๋ค๋ฉด export default function Main(){ return( ...์ฝ๋ ) }
- ๋๋ฌด ํ๋ฆฌ์ง ์์ผ๋ฉด ์๋ฆฌ์ ๋ํด ์๊ฐํด๋ณด์(๊ธฐ์ด๋ถํฐ ๋์๊ฐ ๊ฒ!)
- router = ๊ฒฝ๋ก์ด๋!!! ํ์ง๋ง router,query๊ฐ์ ๊ฒ๋ค์ ์๋ฌด๋ฐ์๋ ์๋ํ์ง ์์! [dynamicrouting] ํด๋์์ ๊ฐ๋ฅํจ!
- date={date} ---> props๋ก ์ ๋ฌ
- state๋ ํจ์ ์์์ state๊ฐ ๋ฐ๋๊ณ ๋ฐ๋๋ ๊ฐ์ ์ ์ฅ์ ํ๋ค.
์ ์ฅ์ด ๋๊ณ ํจ์๊ฐ ๋๋๋ฉด ๊ทธ๋ ค์ง๊ฒ ๋จ.
์์์ ์ฅ๊ณต๊ฐ์ ์ ๋ ฅํด ๋๊ณ ํจ์๊ฐ ๋์ด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์์ ์ฅ๊ณต๊ฐ์ ํ์ธ ํ์ ๋ฐ๋ ๊ฐ์ ํ์ธ ํ ํ๋ฉด์ ๊ทธ๋ ค์ง๋ค.