๋ฆฌ์กํธ ๋ผ์ฐํฐ๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋์์์ ๋ผ์ฐํ ์ ๊ฐ๋จํ๊ฒ ๊ตฌํํ๋๋ก ๋์์ค๋ค. >// ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น $ yarn add react-router-dom 1. ๋ผ์ฐํฐ ์ ์ฉ ํ๋ก์ ํธ index.jsํ์ผ์์ react-router-dom์ BrowseRouter ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด์ ๋ ๋๋ง ํ๊ณ ์ ํ๋ APP ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ธ๋ฉด ๋๋ค. ํด๋น ์ปดํฌ๋ํธ๋ ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจ ํ์ง ์์ผ๋ฉด์ ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ๋ค. 2. Route ์ปดํฌ๋ํธ๋ก ์ฃผ์ ์ค์ (1) ๊ท์น Route ์ปดํฌ๋ํธ๋ฅผ ์ด์ฉํ๋ฉด, url ๊ฒฝ๋ก์ ๋ฐ๋ผ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ค ์ ์๋ค. ์ฃผ์์ ๋์ํ๋ ์ปดํฌ๋ํธ๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค. > ๋ง์ฝ ํ์ ์ฃผ์๋ฅผ '/'๋ก ์ค์ ํ๊ณ ํ๋กํ์ ์ฃผ์๋ฅผ '/profile'๋ก ์ค์ ํ๋ค๋ฉด '/'์ด ๊ฒน์น๊ธฐ ๋๋ฌธ์ ํ๋กํ ํ์ด์ง์์ ํ์ ๋ด์ฉ๋ ๋ณด์ผ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ํ์ ์ฃผ์ ๊ท์น์ exact = {true}๋ฅผ ์ถ๊ฐํด์ค์ผ ํ๋ค. ์ฌ๊ธฐ์๋ ์์๋ก Home ํ์ด์ง์ A
์ปดํฌ๋ํธ์์ ์ํ๋ฅผ ์ ๋ฐ์ดํธ ํ ๋๋ ๋ถ๋ณ์ฑ์ ์ ์งํ๋ฉด์ ์ํ๋ฅผ ์ ๋ฐ์ดํธ ํ๋๊ฒ์ด ์ค์ํ๋ค. ๋ถ๋ณ์ฑ์ด ์ง์ผ์ง์ง ์์ผ๋ฉด ๊ฐ์ฒด ๋ด๋ถ์ ๊ฐ์ด ๋ฐ๊ปด๋ ๊ฐ์ง๋ฅผ ๋ชปํ๊ธฐ ๋๋ฌธ์ด๋ค. >// immer ์ค์น $ yarn add immer ์ฌํ๊น์ง๋ ๊ธฐ์กด์ ๊ฐ์ ์ ์งํ๋ฉด์ ์ํ๋ ๊ฐ์ ์๋ก ์ง์ ํ์ง ์ํด ์ ๊ฐ ์ฐ์ฐ์(...)๋ฅผ ์ฌ์ฉํ๋๋ฐ ์ฌ์ฉํ๊ธฐ์ ์ข ๋ฒ๊ฑฐ๋กญ๋ค. ๋ํ ์ ๊ฐ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ฒด๋ ๋ฐฐ์ด ๋ด๋ถ์ ๊ฐ์ ๋ณต์ฌํ๋ฉด ์์ ๋ณต์ฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์ ๊ฐ์ ์์ ํ ์๋ก ๋ณต์ฌํ๋๊ฒ์ด ์๋๋ค! ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ๊ตฌ์กฐ๊ฐ ๋ณต์กํ ๋ ์ฝ๋๊ฐ ๋ณต์กํด์ง๊ณ ์์ฑํ๋๊ฒ์ด ๋ฒ๊ฑฐ์ด๋ฐ, ์ด๋ฌํ ๋ฒ๊ฑฐ๋ก์ด์ ํด๊ฒฐํด์ฃผ๋ ๊ฒ์ด immer ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค. 1. produce ํจ์ immer ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ produce ํจ์๋ ๋๊ฐ์ง ์ธ์๋ฅผ ๋ฐ๋๋ค. ์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ ์์ ํ๊ณ ์ถ์ ์ํ, ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ ์ ๋ฐ์ดํธ ํจ์์ด๋ค. ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฐ์ดํธ ํจ์๋ฅผ ์ ๋ฌํ ๊ฒฝ์ฐ, ์ ๋ฌํ๋ ์ ๋ฐ์ดํธ ํจ์์์ ์ํ๋ ๊ฐ์ ๋ณ๊ฒฝ
10์ฅ์์ ๋ง๋ค์๋ To-do App์์ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋๋ ค์ง ๊ฒ์ด๋ค. App.jsํ์ผ์ ์ข ์์ ํด์ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋ง ํด๋ณด์! 1. ๋ง์ ๋ฐ์ดํฐ ๋ ๋๋ง (1) useState์ ๊ธฐ๋ณธ๊ฐ์ ํจ์๋ก #createBulkTodos๋ ๋ฐ๋ณต๋ฌธ์ ํตํด ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ํจ์์ด๋ค. useState์ ๊ธฐ๋ณธ๊ฐ์ createBulkTodos()๋ก ์ง์ ํ๋ฉด, ๋ฆฌ๋ ๋๋ง ๋ ๋๋ง๋ค createBulkTodosํจ์๊ฐ ์คํ๋์ง๋ง ๊ดํธ ์์ด createBulkTodos๋ก ์ง์ ํ๋ฉด, ์ฒ์ ๋ ๋๋ง ๋ ๋๋ง createBulkTodos ํจ์๊ฐ ์คํ๋๋ค. 2. ๋๋ ค์ง๋ ์์ธ ๋ถ์ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋๋ ๊ฒฝ์ฐ๋ ์๋์ ๊ฐ๋ค. ์ ๋ฌ๋ฐ์ props๊ฐ ๋ฐ๋ ๋ ์์ ์ state๊ฐ ๋ฐ๋ ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๋ forceUpdate ํจ์๊ฐ ์คํ๋ ๋ ๋ฐ๋ผ์ ์ปดํฌ๋ํธ๊ฐ ๋ถํ์ํ๊ฒ ๋ฆฌ๋ ๋๋ง ๋๋๊ฑธ ๋ฐฉ์งํด์ผ ํ๋ค. 3. ์ปดํฌ
์ปดํฌ๋ํธ ์ ์ธ๋ฐฉ์์ ํด๋์คํ ์ปดํฌ๋ํธ์ ํจ์ํ ์ปดํฌ๋ํธ๊ฐ ์๋ค. rcc + enter -> ํด๋์คํ ์ปดํฌ๋ํธ ์์ฑ ์ฝ๋ ์์ฑ rsc + enter -> ํจ์ํ ์ปดํฌ๋ํธ ์์ฑ ์ฝ๋ ์์ฑ 1. ํด๋์คํ ์ปดํฌ๋ํธ render ํจ์๊ฐ ๋ฌด์กฐ๊ฑด ์์ด์ผ ํ๋ค. 2. ํจ์ํ ์ปดํฌ๋ํธ ํจ์๋ฅผ ์์ฑํ ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์์ ๋์ผํ๊ฒ์ด ์๋๋ฏ๋ก ์ฃผ์! function ํค์๋ ์ฌ์ฉ ์์ ์ด ์ข ์๋ ๊ฐ์ฒด๋ฅผ this๋ก ๊ฐ๋ฆฌํจ๋ค. ํ์ดํ ํจ์ ์ฌ์ฉ ์์ ์ด ์ข ์๋ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ ๋ ์ ์ฉ 3. props ์ปดํฌ๋ํธ ์์ฑ์ ์ค์ ํ ๋ ์ฌ์ฉํ๋ ์์์ด๋ค. props๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์ ์ฌ์ฉํ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์ค์ ํ ์ ์๋ค. (1) ๋น๊ตฌ์กฐํ ํ ๋น ๋ฌธ๋ฒ ๊ตฌ์กฐ ๋ถํด ๋ฌธ๋ฒ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค. ํจ์์ ํ๋ผ๋ฏธํฐ ๋ถ๋ถ์๋ ์ฌ์ฉํ ์ ์๋ค. (2) propTypes props์ ํ์ ์ ์ง์ ํ
1. ์ฝ๋ ์ดํดํ๊ธฐ (1) ๋ฒ๋ค๋ฌ import ๊ตฌ๋ฌธ์ ์๋ ๋ธ๋ผ์ฐ์ ์๋ ์๋ ๊ธฐ๋ฅ์ธ๋ฐ, ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ํ๊ฒฝ์์ js๋ฅผ ์คํํ ์ ์๋๋ก node.js์์ ์ง์ํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ๋ธ๋ผ์ฐ์ ์์๋ ์ฌ์ฉํ ์ ์๊ฒ ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๋ฒ๋ค๋ฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด import๋ก ๋ชจ๋์ ๋ถ๋ฌ์์ ๋ ๋ถ๋ฌ์จ ๋ชจ๋์ ๋ชจ๋ ํฉ์ณ ํ๋์ ํ์ผ์ ์์ฑํด์ค๋ค. ์ด ์ฑ ์ ํ๋ก์ ํธ์์๋ src/index.js๋ก ํ์ํ ํ์ผ๋ค์ ๋ค ๋ถ๋ฌ์ ๋ฒ๋ค๋งํ๋ค. ๋ฆฌ์กํธ ํ๋ก์ ํธ์์ ๋ฒ๋ค๋ฌ๋ก ์ฃผ๋ก ์นํฉ์ ์ฌ์ฉํ๋ค. svg, css ํ์ผ์ ๋ถ๋ฌ์ค๋ ๊ฒ์ ์นํฉ์ ๋ก๋๋ผ๋ ๊ธฐ๋ฅ์ด ๋ด๋นํ๋ ๊ฒ์ด๋ค. ์นํฉ์ ๋ก๋ ๊ฐ์ ๊ฒ๋ ์๋ ์ง์ ์ค์นํด์ผ ํ๋๋ฐ, create react-app ๋ช ๋ น์ด๊ฐ ์์์ ํด์คฌ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ค์ ํ ํ์๊ฐ ์๋ค. (2) ํจ์ํ ์ปดํฌ๋ํธ  ์ด๊ธฐ ๋ ๋๋ง render() ํจ์๋ ์ปดํฌ๋ํธ๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง ์ ์ํ๋ ์ญํ ์ ํ๋ค. ๋๋ถ์ด, ๋ทฐ๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๊ณ ์ด๋ป๊ฒ ์๋ํ๋์ง ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ํจ์์ด๋ค. render() ํจ์๋ฅผ ํตํด ์ด๊ธฐ ๋ ๋๋ง์ ๋ค๋ฃจ๋๋ฐ, ์ด๋ ๋ ๊ฐ์ง ์ ์ฐจ๋ฅผ ๋ฐ๋ฅธ๋ค. ๋ฌธ์์ด ํํ์ HTML ์ฝ๋๋ฅผ ์์ฑ ํน์ DOM์ ํด๋น๋ด์ฉ์ ์ฃผ์ (2) Re๋ ๋๋ง (์กฐํ๊ณผ์ ) ๋ทฐ์ ์์ ์ฌํญ์ด ์๊ฒผ์ ๋ ์กฐํ๊ณผ์ ์ ๊ฑฐ์น๋ค. ์ปดํฌ๋ํธ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธ ํ์ ๋ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ render()ํจ์๋ฅผ ๋ค์ ํธ์ถํ๋ค. render()ํจ์์ ๋ฐํ๊ฐ์ ๋ฐ๋ก DOM์ ์ ์ฉํ๋ ๊ฒ์ด ์๋๋ผ, ์ด์ render()ํจ์๊ฐ ๋ง๋ ์ปดํฌ๋ํธ ์ ๋ณด์ ํ์ฌ render() ํจ์๊ฐ ๋ง๋ ์ปดํฌ๋ํธ ์ ๋ณด๋ฅผ ๋น๊ตํ์ฌ ๋์ ์ฐจ์ด๋ง ์ ๋ฐ์ดํธ ํ๋ ๊ฒ์ด๋ค. 2. ๋ฆฌ์กํธ ํน์ง (1) Dom DOM์ด