๋ฆฌ์กํธ
๋ฅผ ์น๊ตฌ๋ ํ๋ฐฐ์๊ฒ ๊ฐ๋ฅด์ณ์ฃผ๋ฉด์ ๋๋ ๋๋์ ๋ณผ ๊ฒธ ์ ๋ฆฌ๋ฅผ ํ์๋๋ค. ์ ๋ง ์ฒ์ ์ ํ๋ ์ฌ๋์๊ฒ ์ต๋ํ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์ ๋ฆฌ ํ๋ ค๊ณ ํ๊ณ , ์น๊ตฌ์ ํ๋ฐฐ๊ฐ ๋ณด๊ธฐ ์ฝ๊ฒnotion
์ ์ ๋ฆฌ๋ฅผ ํด์ ๋งํฌ๊ฐ ์กฐ๊ธ... ์ด์ํ ์ ์์ต๋๋ค. ๊ณ ์ ์ ์ฅ ๊ธ์ง๋ผ๊ณ ํด๋จ๋๋ฐ ๋ค๋ค ์ฝ์ผ์๊ณ ์ด์ํ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋ง์ํด์ฃผ์๋ฉด ์์ ํ๊ฒ ์ต๋๋ค~!
React๋ ํ์ด์ค๋ถ์์ ๋ง๋ ์ปดํฌ๋ํธ ๋จ์๋ก UI๋ฅผ ๊ตฌ์ฑํ๋ Javascript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ๋ฐ
UI๋ฅผ ๊ตฌ์ฑํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค์ผํ๊ธฐ ๋๋ฌธ์ ์ ์ธ์ ์ด๊ณ
์ปดํฌ๋ํธ ๋จ์๋ก UI๋ฅผ ๊ตฌ์ฑํ์ฌ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ ํจ์จ์ ์ด๋ฉฐ
State์ Props๋ก ์ปดํฌ๋ํธ์ ์ํ์ ์์ฑ์ ๊ด๋ฆฌํ๊ณ
์ด๋ค์ Virtual DOM์ ์ฌ์ฉํ์ฌ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ฃผ๋๊ตฌ๋!
https://velog.io/@skypedanny/๋ฆฌ์กํธ-๊ทธ๊ฒ-๋ญ๋ฐ
๋ฆฌ์กํธ๋ ๋ทฐ๋ง ์ฑ
์์ง! ๊ทผ๋ฐ ๊ทธ๋ ๋ค๊ณ ํด์ ๋ณ๊ฑฐ์๋๊ฑด ์๋!
๋ผ์ฐํฐ์ฒ๋ฆฌ, state๊ด๋ฆฌ, API์ฐ๊ฒฐ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฌ์ฉ, ์ปดํฌ๋ํธ ๋ถ๋ฆฌ๋ฑ๋ฑ ์๊ฐํด์ผ ํ ๊ฒ์ด ํ ๋๊ฐ์ง๊ฐ ์๋ ๊ทธ๋ฌ๋๊น ๋ฐฐ์์ผ ํ ๊ฒ ๋ง๋ค~ ์ด ๋ง
React๋ฅผ ์์ํ๊ธฐ ์ํด์๋ ์ ๋ง ์ด๊ธฐ ๊ตฌ์ฑ ์ค์ ์ด ์ด๋ ค์.
webpack ์ค์ , babel์ค์น, configํ์ผ ์ค์ ๋ฑ๋ฑ๋ฑ.....
create-react-app์ ์ ์์ ๊ฒ๋ค์ ์ค์ ํ ํ์์์ด ๊ทธ๋ฅ ์ค์น๋ง ํ๋ฉด ๋ฐ๋ก ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ์์ฃผ ์ข์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
(๋๋ ๋ฆฌ์กํธ ํ๋ก์ ํธ ์์ํ ๋ ๋๋ถ๋ถ ์ด๊ฑธ๋ก ์์)
์ปดํฌ๋ํธ๋ ๋ฆฌ์กํธ
๋ฅผ ์ด๋ฃจ๋, ๋ทฐ
๋ฅผ ๊ตฌ์ฑํ๋ ์ฃผ์ ์์๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๋ฏ? ์ต์๋จ ์ปดํฌ๋ํธ์์ ์ ๋ง ์์ (์๋ฅผ๋ค๋ฉด ํ๋์ ๋ฒํผ์ ๋ณด์ฌ์ฃผ๋ ์ปดํฌ๋ํธ)๊น์ง ์ ๋ถ ์ปดํฌ๋ํธ๋ก ์ด๋ฃจ์ด์ ธ์์ด์ ๊ทธ๋์ ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ ๋๋ ์ปดํฌ๋ํธ๋ฅผ ์ด๋ป๊ฒ ๋๋๊ณ , ์ด๋ป๊ฒ ์งค ๊ฒ์ธ์ง์ ๋ํด์ ๊ณ ๋ฏผ์ ๋ง์ด ํ๊ฒ๋จ (์? ํ๋์ ์ปดํฌ๋ํธ์์ ๋๋ฌด ๋ง์ ๊ธฐ๋ฅ์ ๋ฃ์ผ๋ฉด ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๊ณ ์ฌ์ฌ์ฉ์ฑ์ด ๋จ์ด์ง) ์ปดํฌ๋ํธ๋ฅผ ๋๋๋ ๊ฑด ๋๋ถ๋ถ ๊ธฐ๋ฅ๋ณ๋ก? ์ฌ์ฌ์ฉ๊ฐ๋ฅํ ๋จ์๋ณ๋ก? ๋๋๋๊ฒ ๋๋ถ๋ถ์ธ๋ฏ!
์ปดํฌ๋ํธ๋ฅผ ์ด๋ป๊ฒ ๋๋ ๊ฒ์ธ๊ฐ ์๊ฐ์ ํด๋ณด๋ฉด
- ํ๋ฉด ์ ์ฒด๋ฅผ ๋ํ๋ด๋ ์ปดํฌ๋ํธ (๊ฐ๋ ์ฑ์ด ๋ฐ์ด๋จ)
- ๋ก๊ณ ์ปดํฌ๋ํธ
- ๊ฒ์์ฐฝ ์ปดํฌ๋ํธ
- ๋๊ทธ๋ผ๋ฏธ ์ปดํฌ๋ํธ (์ฌ์ฌ์ฉ์ฑ์ด ๋ฐ์ด๋จ)
๋ก ๋๋ ์ ์๊ฒ ์ง? ๊ทธ ์์ ์ธ๋ถ์ ์ผ๋ก ๋ค์ด๊ฐ๋ฉด ๋ญ ํ ๊ฒ ๋ง๊ฒ ์ง๋ง, ์ ์ฒด์ ์ผ๋ก ๋ณด๋ฉด ์ด๋ ๊ฒ ๋๋ ์ ์๋ค~ ์ด๋ฐ๋ง
๊ทธ๋ฌ๋ฉด ์ปดํฌ๋ํธ๊ฐ ์ด๋ค๊ฑด์ง ๋์ถฉ ์ถ์์ ์ผ๋ก ์์์ผ๋๊น ์ด์ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์๊ฐ์ด์ผ^^ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ ๋ ๊ฐ์ง ํํ๋ฅผ ์ ๊ณตํ๊ณ ์์ด.
- ํด๋์คํ ์ปดํฌ๋ํธ class component
- ํจ์ํ ์ปดํฌ๋ํธ function component
ํด๋์คํ ์ปดํฌ๋ํธ
ํจ์ํ ์ปดํฌ๋ํธ
๋ ๊ฐ์ง ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ..
๋ฆฌ์กํธ ๊ณต์๋ฌธ์์๋ ์ด๋ป๊ฒ ๋์์๋๋ฉด
ํด๋์คํ ์ปดํฌ๋ํธ๋ ๊ธฐ๊ณ์ ์ด๊ณ , ํจ์ํ ์ปดํฌ๋ํธ๋ ์ธ๊ฐ ์นํ์ ์ผ๋ก ๋ค๊ฐ๊ฐ ์ ์๋ค.
๊ทธ๋ฌ๋๊น, ํด๋์คํ์ ์กฐ๊ธ ๊ธฐ๊ณ์ ์ผ๋ก, ์ฐ๋ฆฌ ๋ง์์ ์ ์๋ฟ์ง ์๋ ๊ตฌ์กฐ์ด๊ณ ํจ์ํ์ด ์ฐ๋ฆฌ๊ฐ ์กฐ๊ธ ๋ ์น์ํ๊ฒ ๋ค๊ฐ๊ฐ ์ ์๋ ๊ตฌ์กฐ๋ผ๋ ์๊ธฐ์
ํด๋์คํ ์ปดํฌ๋ํธ
๋ ์๋ ์ ์ฌ์ฉ๋๊ณ , ํจ์ํ ์ปดํฌ๋ํธ
๋ ์ต๊ทผ์ ์ด์ ๋จ๊ธฐ ์์ํ์ด ์? ๊ทธ ์ ์๋ ํจ์ํ ์ปดํฌ๋ํธ
์์ state
๋ life cycle
์ด๋ผ๋ ๊ฒ์ ๋ชปํ๊ฑฐ๋ . ๊ทผ๋ฐ ์ต๊ทผ ๋ฆฌ์กํธ ์
๋ฐ์ดํธ์์ ํจ์ํ ์ปดํฌ๋ํธ
์์๋ state
๋ life cycle
์ ์กฐ์ ํ ์ ์๋ ๊ฒ์ ์
๋ฐ์ดํธํด์คใ
^^
๊ทธ๊ฒ ๋ฌด์์ด๋ ๋ฐ๋ก๋ฐ๋ก React Hooks
!!
React Hooks
๋ฅผ ์ฌ์ฉํ๋ฉด ํจ์ํ ์ปดํฌ๋ํธ
์์๋ state
๋ life cycle
์ ์กฐ์ ํ ์ ์๋๋ฐ ๊ทธ๊ฑด ๋์ค์ ์๊ฒ๋๊ฒ ์ง ๋ญใ
ใ
ใ
^^
๊ฒฐ๋ก : ์ต์ ๋ฌธ๋ฒ์ Function Component์ React Hooks๋ฅผ ์ด์ฉํ ๊ตฌ์กฐ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค
์ฐจ์ด์ ์ ์กฐ๊ธ ๋ ์์ธํ๊ฒ ๋ค์ด๊ฐ๋ฉด
Class Component
์์๋ state
๋ฅผ ๋ณ๊ฒฝํ ๋ this.setState
๋ผ๋ ํจ์๋ฅผ ๋ถ๋ฌ์ ์คํ
์ดํธ๋ฅผ ๋ณ๊ฒฝํด์ผ๋จ. ๊ทผ๋ฐ ์ด๊ฒ ๋จ์ ์ด ๋ญ๋๋ฉด, ๋ง์ฝ ํ๋์ state๋ง ๋ณ๊ฒฝํ๊ณ ์ถ์๋ฐ this.setstate
ํจ์๋ฅผ ๋งค๋ฒ ๋ถ๋ฌ์ผํ๋ค~ ํ์ง๋ง React Hooks
๋ฅผ ์ฌ์ฉํ๋ฉด
์๊ธฐ ๋ณด์ด๋ ๊ฒ ์ฒ๋ผ ๊ฐ๊ฐ State
๋ฅผ ์ ์ธํ ๋ setter
๋ ๊ฐ์ด ์ ์ธํด์ค. ๊ทธ๋์ ์ ํจ์๋ฅผ ์ฌ์ฉํด์ ๊ฐ๊ฐ์ State
๋ค์ ๋ฐ๊ฟ ์ ์๋ฐ. this.setState
๋ฅผ ์ ์ธ ์ํด์ค๋ ๋จ
๊ทธ๋ฆฌ๊ณ function component
๋ ๊ทธ๋ฅ return ๋ฌธ์ผ๋ก ์์ฑํ๋ฉด ๋๋๋ฐ, class component
๋ renderํจ์ ์์์ return๋ฌธ์ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก ์งํ์ด ๋๋ค. ์์ฒญ๋๊ฒ ๊ท์ฐฎ๊ณ ๊ทธ๋ฐ๊ฑด ์๋๋ฐ, ๊ทธ๋ฅ ๊ฐ๋ฐ์๋ค์ ์ด๊ฒ ๊ท์ฐฎ๋๋ด. ๊ทธ๋์ ๋๋ Function Component
์ React Hooks
๋ฅผ ์ฌ์ฉํ๋ ์กฐํฉ์ผ๋ก ๋ฐ๊ฟจ์. ๊ทผ๋ฐ ํธํ๊ฑฐ ๊ฐ์^ ( ์์ ์๋ ๋๋ Class Component
์ฌ์ฉํ์. )
๋ ๊ฐ์ ๊ฐ๋ ์ ์ ๋ง ์ค์ํ์ง, ๋ฆฌ์กํธ๋ฅผ ํ๋ค๊ณ ํ๋ฉด ์ด๋ค state์ ๋ฐ๋ผ์ view๋ฅผ ๊ฒฐ์ ํ๊ณ (์กฐ๊ฑด๋ถ ๋ ๋๋ง) , props๋ฅผ ์ ๋ฌํ๊ณ , state๋ฅผ ๋ณ๊ฒฝํ๊ณ , ๊ด๋ฆฌํ๊ณ ๋ฑ๋ฑ ๋ฆฌ์กํธ์์ ์ ๋ง ์ค์ํ ๊ฐ๋ ๋ค์ด์ผ
๋ ๊ฐ์ ๊ณตํต์ ์ ๋ ๋ค ๋ ๋๋ง
์ ์ํฅ์ ์ฃผ๋ ๋ฐ์ดํฐ๋ค ์ด๋ผ๋ ์ ! ๊ทธ๋ผ state
์ props
๋ ๋ฌด์จ ์ฐจ์ด๊ฐ ์์๊น?
state
๋ ์ปดํฌ๋ํธ์์์ ์ฌ์ฉ์ด ๋๋๋ฐ์ดํฐ
์ด๋ค!
props
๋ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋์ด์(๋ง์น ํจ์์ ๋งค๊ฐ๋ณ์์ฒ๋ผ)์ฌ์ฉ๋๋๋ฐ์ดํฐ
์ด๋ค.
์ด๋ ๊ฒ ์ค๋ช ํ๋ฉด ์ ๋ชจ๋ฅด๊ฒ ์ง? ใ ใ ๊ทธ๋ด๊ฑฐ๊ฐ์์ด ๊ทธ๋์ ์ค๋นํ์ง
์ด์ ๋ ํจ์ํ ์ปดํฌ๋ํธ
๋ก ๊ธฐ์ค์ ์ก์์ ์งํ์ ํ๊ฒ ์ต๋๋ค. ์๋ํ๋ฉด ํด๋์คํ ์ปดํฌ๋ํธ
๋ ๋ ์ด์ ์ ์์ฐ์ด๊ณ , ๊ณต์๋ฌธ์์์๋ ํจ์ํ ์ปดํฌ๋ํธ
๋ฅผ ๋ฐ์ด์ฃผ๊ฑฐ๋ .
์์ง ์๋ชจ๋ฅด๋๋ผ๋ ํจ์ํ ์ปดํฌ๋ํธ
์ React Hooks
๋ฅผ ๊ณ์ ์ฌ์ฉํ๋ ค๊ณ ๋
ธ๋ ฅ์ ํด์ผ ์ต์ํด์ง!
TestComponent.jsx
์์ ์์ ๋ฅผ ๋ณด๋ฉด count state
๋ฅผ ์ ์ธํด์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณผ ์ ์์! ๋ณดํต state
๋ก ์ ํ๋ ๊ฒ๋ค์ ๋ณํ๋ ๊ฐ
์ state
๋ก ๋ง์ด ์ค์ ํจ!
์ ์์ ์์๋ count
๊ฐ ์ด ๋ณํ๋ ๊ฐ์ด๋๊น state
๋ก ์ง์ ์ ํด์ค ๊ฒ์. ๊ทธ๋ฆฌ๊ณ state
๋ก ์ง์ ํด์ค ๊ฐ์ด ๋ณํ ๋๋ง๋ค ๊ทธ ๊ฐ์ ์ฌ์ฉํ๋ ๋ถ๋ถ์ด ๋ค์ ๋ ๋๋ง๋จ!
ํ์ด์ง๊ฐ ์ ์ฒด๊ฐ ๋ค์ ๋ฆฌ๋ก๋ ๋๋ ๊ฒ์ด ์๋๋ผ, ํด๋น ์ํ๊ฐ์ ์ฌ์ฉํ๋ ๋ถ๋ถ๋ง ๋ค์ ๋ ๋๋ง์ด ๋๋ค~ ์ด ๋ง์
๊ทธ๋ฆฌ๊ณ state
๋ ๋ฐฐ์ด, ์ซ์, ๋ฌธ์, ๊ฐ์ฒด ๋ชจ๋ ํํ๋ก ์กด์ฌํ ์ ์์ด.
๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ์ปดํฌ๋ํธ์์์ ์ ์๋ state
๋ ์ด ์ปดํฌ๋ํธ์์ ์ฌ์ฉ๋๋ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ง์ฝ์ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ก state
๋ฅผ ๋๊ฒจ์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด? ์ ๋ฌ์ ํ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ๋ ๊น?
props
์ ๊ฐ๋
์ด ๋ค์ด๊ฐ๋๊ฑฐ์งTestComponent.jsx
TestChildComponent.jsx
TestComponent
์์ TestChildComponent
๋ก count state
๋ฅผ ๋๊ธฐ๋ ค๋ฉด props
๊ฐ๋
์ ๋์
ํด์ ์ ๋ฌ์ ํด์ผ ๋ผ!
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก props
๋ฅผ ๋๊ธฐ๊ฒ ๋์ด์์ด. ๋ด๊ฐ ์์ ์์๋ ๋ ๋ค count
๋ก ์ด๋ฆ์ ์ง์ ํด๋์ ํท๊ฐ๋ฆด์๋ ์๋๋ฐ, ๋๊ฐ ๋ง์ฝ์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋๊ธฐ๊ณ ์ถ์ผ๋ฉด ๋ค๋ฅธ์ด๋ฆ = { count }
์ด๋ฐ์์ผ๋ก ๋ค๋ฅธ์ด๋ฆ์ผ๋ก props๋ฅผ ๋๊ธธ ์ ์์ด.
๊ทธ๋ผ ๋๊ธฐ๋๊ฑฐ๊น์ง๋ ์ฑ๊ณตํ๋๋ฐ ๋ฐ๋์ชฝ์์ ์ฌ์ฉ์ ์ด๋ป๊ฒ ํ ๊น?
๋ฐ์์ชฝ ์ปดํฌ๋ํธ์์๋ ์์์ ๋ฐ ์ค ์น ๊ฒ์ฒ๋ผ ์์์ ๋๊ธธ props ์ด๋ฆ
์ผ๋ก ์ง์ ํด๋์ ๊ฑธ๋ก ๋ฐ์ ์ ์์ด ๋ง์ฝ์ count
๊ฐ ์๋๋ผ ๋ค๋ฅธ์ด๋ฆ์ผ๋ก ์ง์ ํด๋จ์ผ๋ฉด ํด๋น ์ด๋ฆ์ผ๋ก ๋ฐ์์ผ ๋ผ!
์ ๋ ๊ฒ count
๋ฐ์ดํฐ๋ฅผ ๋ถ๋ชจ๋ก ๋ฐ๊ฒ ๋ค๊ณ ์ ํด๋๊ณ , ์๋ View
๋ฅผ ์ฑ
์์ง๋ return
๋ฌธ์์ ์ฌ์ฉ์ ํ๋ฉด ๋๋๊ฑฐ์! ์ ๋ง ์ฝ์ฃ ~?
๊ทธ๋ผ ์ count
๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ๋ฐ์ props
๊ฐ ๋๋๊ฑฐ์ง.
์ด์ props
์ ๋ํด์ ์์๋ค ์ด๊ฑฐ์ผ. ๊ทผ๋ฐ children
์ ๋ญ๋๊ณ ?
์ฐ๋ฆฌ๊ฐ props
๋ก ๋๊ธฐ๊ณ ์ถ์ ๋ฐ์ดํฐ๊ฐ ์ ๋ฐ ์ํ๊ฐ์ด๋ ํน์ ๊ฐ๋ง๊ณ , HTML์์๋ฅผ ๋๊ธฐ๊ณ ์ถ์ผ๋ฉด?
๊ทธ๋ด๋ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด children
์ด๋ผ๋ props
์
๋๋.
์ฐ๋ฆฌ๋ ์ ๋ ๊ฒ TestChildComponent
์์ HTML ์์๋ฅผ ์ถ๋ ฅํ๊ณ ์ถ๋ค๋ฉด?
children
์ ๋ฐ๊ฒ ๋ค๊ณ ๋ช
์๋ฅผ ํด์ค ๋ค์ return
๋ฌธ์์ {children}
์ ๊ณ ๋๋ก ์ถ๋ ฅํด์ฃผ๋ฉด
<p>์๊ธฐ๋ children ์ด๋ฆ์ผ๋ก ์ ๋ฌ๋ ๊ฑฐ์ผ!</p>
์ด ๋ถ๋ถ์ด ์ ๋ฌ์ด ๋๋๊ฑฐ์ง! ์ด๊ฒ props
children
์ ๊ฐ๋
์ด์ผ. ๋ค๋ฅธ props
๋ค์ ๋๊ฐ ์ด๋ฆ์ ์ ํ๋๋๋ก ์ ๋ฌ์ด ๋๊ฒ ์ง๋ง, ์ด๋ ๊ฒ children
์ฒ๋ผ ์ ํด์ง ์์๊ฐ ์๋ค๋ ๊ฒ!
์ฝ์ฃ ?
state
๋ props
์ ๊ฐ๋
๊ธฐ๋ณธ์ ์ธ ๊ฒ๋ค์ ๋ค ๊ฐ๋ฅด์ณ์ค๋ฏ
๊ทธ๋ผ ์๊ฐํ ์ ์๋๊ฒ, ๋ง์ฝ ํ๋ก์ ํธ์ ํฌ๊ธฐ๊ฐ ์ ๋ง ์ ๋ง ์ปค์ ธ์
๊ณ ์กฐ ํ ์๋ฒ์ง ์ปดํฌ๋ํธ
โ ์ฆ์กฐ ํ ์๋ฒ์ง ์ปดํฌ๋ํธ
โ ํ ์๋ฒ์ง ์ปดํฌ๋ํธ
โ ์๋ฒ์ง ์ปดํฌ๋ํธ
โ ์์ ์ปดํฌ๋ํธ
์ด๋ ๊ฒ ๊ณ์ธต๊ตฌ์กฐ๊ฐ ์ด๋ฃจ์ด์ ธ์ ๋งจ ์์ ์ปดํฌ๋ํธ์์ ๋งจ ์๋์ ์ปดํฌ๋ํธ์ ์ํ๊ฐ์ ๋๊ธฐ๊ณ ์ถ์ด. ๊ทธ๋ฌ๋ฉด ์ผ์ผ์ด props
๋ก ๋๊ฒจ์ผํ ๊น? No. ์ ๋ ๊ทธ๋ ๊ฒ ์ผ์ผ์ด ๋ค ํ ์์์ด.
๊ฐ๋
์ฑ๋ ์ ๋ง ๋จ์ด์ง๊ณ ์ฝ๋์ ํ๋ฆฌํฐ๋ ์ ๋ง ๋จ์ด์ง๊ฑฐ์ผ. ์ด์ ๊ทธ๋ด ๋ ํ์ํ ๊ฐ๋
์ด ๋ฐ๋ก๋ฐ๋ก ๊ทธ ๋ฌด์๋ฌด์ํ ์ ์ญ ์คํ
์ดํธ ๊ด๋ฆฌ
๊ฐ ๋๋๊ฑฐ์ง. ๋ํ์ ์ธ ๊ฒ๋ค๋ก๋ Redux
mobX
Context API
, ๊ทธ๋ฆฌ๊ณ ์๋กญ๊ฒ ๋จ๊ณ ์๋ Recoil
๋ฑ๋ฑ... ๊ฑฐ์ ๋ฆฌ์กํธ์ ๋ํ์๐ฟ์ด์ง. ๊ฐ๊ฐ ์ฌ์ฉํ๋ ๋ฐฉ์๋ ๋ค๋ฅด๊ณ , ์ฌ์ฉํ๋ ์ํฉ๋ ์กฐ๋์ฉ ๋ฌ๋ผ. ์ผ๋จ ์ด๋ฐ๊ฒ๋ค์ด ์๋ค๋ ๊ฑธ ์๊ณ ์๋ ๊ฒ ๋ง์ผ๋ก๋ ๋ํฌ๋ ์ต๊ณ ์ผ.
์ ์ญ ์คํ
์ดํธ ๊ด๋ฆฌ
๋จ์ด๋ง ๋ค์ด๋ ์ ์ถํ ์ ์๋ฏ์ด ์ ์ฒด์ ์ผ๋ก ์คํ
์ดํธ๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ์ด๋ ํ ๊ฒ์ด ์๊ณ , ๊ฑฐ๊ธฐ๋ง ์ฐธ์กฐ๋ฅผ ํ๋ฉด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ ๊ทธ๋ฐ ๋๋์ ์ธ ๋๋. ์ฌํผ ๊ณ ์-โ๏ธ๋ฟ
ํด๋ฆญํ์ ๋, ๋ง์ฐ์ค ์ฌ๋ ธ์ ๋, ๋ง์ฐ์ค ๋๊ฐ์ ๋ ๋ฑ๋ฑ ์ฌ๋ฌ๊ฐ์ง ์ด๋ฒคํธ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ HTML ์ด๋ JS๋ ๋๊ฐ์!
๋๊ฐ ์ด๋ฒคํธ๋ฅผ ๋ฃ๊ณ ์ถ์ ์์์ on
๋ง ์จ๋ ์ฌ๋ฌ๊ฐ์ง ์ด๋ฒคํธ๋ค์ด ๋์ด. ์ ์ผ ๋ง์ด ์ฐ๋๊ฑด click
์ด๋ change
์
์ปดํฌ๋ํธ์์ ํจ์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ (const) onClick ํน์ฑ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋๊ฑฐ์
์ด์ ๋๋ฉด ์ด๋ฒคํธ ์ฐ๋๊ฑด ๋ค ์์๋ค ๋ณด๋ฉด ๋จใ ใ
ใ ใ
๊ฐ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ฑํ ํจ์๋ฅผ ์์ ์ปดํฌ๋ํธ์ ์คํ์ํค๊ณ ์ถ์ ์๊ตฌ๊ฐ ๋ค ๋๊ฐ ์์ด
๊ทธ๋ด ๋ ํจ์๋ฅผ props๋ก ๋๊ธธ ์ ์์! ๊ทธ๋ฅ state๋๊ธฐ๋ ๊ฒ ์ฒ๋ผ ๋๊ฐ์ด ๋๊ธฐ๋ฉด ๋จ
์ด์ฐ์ธํ์ ธ?
์๊ธฐ๊น์ง ๋ค ์ดํดํ์ผ๋ฉด state, props์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ๋ค์ ๋ค ์๋ค๊ณ ๋ด๋ ๋จ
์ด์ ์ ์ ๋ฆฌ์กํธ๋ฅผ ํ๋ค๊ฐ props๋ก ์ผ์ผ์ด ๋๊ธฐ๋ ์์ ๋ค์ด ๊ท์ฐฎ์์ง๋์ฏค ๋๋ฉด ์ ์ญ ์คํ ์ดํธ ๊ด๋ฆฌํด๋ค์ ๋์ ๋จ๋ฉด์ ๊ทธ์ชฝ ๊ณต๋ถ๋ฅผ ์์ํ๋๊ฑฐ์ง.,
์ง๊ธ ์์ํ๊ธฐ์ ์กฐ๊ธ ๋ฌ๋์ปค๋ธ๊ฐ ๋ง์ด ๋๊ธฐ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ธ ๊ฒ๋ค์ ์ตํ๋๊ณ ํ๋๊ฑธ ์ถ์ฒํ ๊ฒ
๋ฆฌ์กํธ์์ ์คํ์ผ๋ง์ ํ๋ ๋ฐฉ๋ฒ์ ์ธ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
- cssํ์ผ์ ๋ฐ๋ก ๋ง๋ค๊ณ import ํด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- inline styling์ผ๋ก ์กฐ์ ธ๋ฒ๋ฆฌ๋ ๋ฐฉ๋ฒ
- styled-components ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ์คํ์ผ๋ง ํ๋ ๋ฐฉ๋ฒ
๋๋ ๋งจ ์ฒ์์๋ 1๋ฒ์ ์ฌ์ฉํด์ ํ์์. ๊ทผ๋ฐ ์ ๋ฐฉ์์ HTML ์์๋ง๋ค ClassName์ ์ง์ ์ ํด์ค์ผํจ (๋ฆฌ์กํธ๋ Class๊ฐ ์๋๋ผ ClassName์ผ๋ก ์ด๋ฆ์ ์ง์ด์ค์ผํจ) ๊ทธ๋์ class๋ช ์ ๊ณ์ ์๊ฐํด์ค์ผ ํ๊ณ ์ด๋ฆ์ด ๊ฒน์น๋ฉด ์๋๊ธฐ๋๋ฌธ์ ์ ์๊ฐ์ ํด์ผ๋จ. ๊ทธ๊ฒ ์๊ทผ ๊ท์ฐฎ์!
๊ทธ๋ฆฌ๊ณ CSS ํ์ผ์ ์์ฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ์ผ ๊ฐ์๊ฐ ๋์ด๋จ ์ด๊ฒ ๋ ํ์ผ๊ตฌ์กฐ๊ฐ ๋ณด๊ธฐ ์์ข์!
๊ทธ๋ฆฌ๊ณ 2๋ฒ์
<div style={{color:'red'}}>๋นจ๊ฐ์ฐ</div>
์ด๋ฐ์์ผ๋ก ์คํ์ผ๋ง์ ํ๋๊ฑด๋ฐ ๊ทธ๋ฅ ํ ์ค ๋ฃ์๋๋ ์ ์ฉํ์ง๋ง CSS๋ฅผ ๋ง์ด ์ ์ฉ์ ํด์ผ๋๋ค๋ฉด ๋ฉ์ธ ์ฝ๋๊ฐ ์ ๋ง ๋๋ฌ์์ง ๊ทธ๋์ ๋น์ถ!
์ด ๋ฐฉ์์ styled-components
๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ์คํ์ผ๋ง์ ํ๋ ๋ฐฉ์์
CSSํ์ผ์ ๋ฐ๋ก ๋ง๋คํ์๋ ์๊ณ ClassName์ ๋ถ์ฌ์ค ํ์๋ ์์!
๊ทธ๋ฆฌ๊ณ ์คํ์ผ๋ง ์ฝ๋๊ฐ ๋ฑ๋ฑ ๋ถ๋ฆฌ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ ๊น๋ํด์ง๊ณ ๊ทธ๋ฆฌ๊ณ
SCSS
๋ผ๋ CSS๋ฅผ ๋์์ฃผ๋ ์คํฌ๋ฆฝํ
๋๊ตฌ ์ธ์ด๋ ์ง์์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ข์!
๋ฉ์ธ ํด๋์์
$ npm install styled-components
๋ฅผ ์ ๋ ฅํด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ์ ๋ค์ด๋ฐ์์ผ ์ฌ์ฉ์ด ๊ฐ๋ฅํจ!
๊ทธ๋ฆฌ๊ณ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด
` ์ด ๋ชจ์์ ~ (๋ฌผ๊ฒฐ๋ชจ์)์ ์ฌํํธ ์๋๋ฅด๊ณ ๋๋ฅด๋ฉด ๋์ค๋ ๊ธฐํธ์!
๋ฐ์ดํ๋ ์๋ฐ์ดํ๊ฐ์๋!
์ด๋ฌ๋ฉด CSS ํ์ผ๋ ์๋ง๋ค์ด๋๋๊ณ ClassName๋ ๋ถ์ฌ์ํด๋ ๋๊ณ ,
์คํ์ผ๋ง์ ๋ณ๊ฒฝํ๊ณ ์ถ์ผ๋ฉด CSSํ์ผ์ ์ฐพ๋๊ฒ ์๋๋ผ ๊ทธ๋ฅ ๋ฐ๋ก ์ปดํฌ๋ํธ ํ์ผ๋ก๊ฐ์ ์ฐพ์ผ๋ฉด ๊ธ๋ฐฉ์ด๋๊น ๊ฐ๋ ์ฑ๋ ์ข์์ง๊ณ ์ฅ์ ์ด ๋ง์ ๊ฒ ๊ฐ์!
์ด๊ฑฐ๋ ์ ๋ต์ด ์๊ณ ์๊ธฐ๊ฐ ํธํ ๋ฐฉ์๋๋ก ํ๋ฉด ๋จ!
styled-components
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋จ์ ์ด ์๋ค๋ฉด, ์ผ๋จ ๋ฌธ๋ฒ ์๋ ์์ฑ ๊ธฐ๋ฅ์ ์ง์์ ์ํด์ค. ๊ทผ๋ฐ ๋๋ ์ฝ๋ ํ๋ฆฌํฐ๊ฐ ๋จ์ด์ง๋ ๊ฒ ๋ณด๋ค๋ ๋ด๊ฐ ์กฐ๊ธ ๋ถํธํ๊ฒ ์กฐ๊ธ ๋ ๋ซ๋ค๊ณ ์๊ฐํจ
๋ชจ๋ฅด๋ฉด ๊ตฌ๊ธ๋งํ๋ฉด ๋ฐ๋ก๋์ด^^
์ด ์ฃผ์ ๋ ๋ฆฌ์กํธ์ ๊ฐ๊น์ด ๋ด์ฉ์ด๋ผ๊ธฐ ๋ณด๋ค๋ ์คํ์์ค
์ ๋ํด ์ต์ํด์ง์ ๋ผ๋ ์ทจ์ง์ ๋ด์ฉ์ด์ผ
๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ํ์ํ ๊ธฐ๋ฅ๋ค์ ๋ง๊ณ , ์๊ฐ์ด ๋ถ์กฑํ ์๋ ์๋๋ฐ ๊ธฐ๋ฅํ๋์ ์์ฒญ๋ ์๊ฐ์ ํฌ์ํ ์ ์์ ๋ ์คํ์์ค
๋ฅผ ์ ๊ทน ํ์ฉํ๋ฉด ์ป์ ์ ์๋ ์ด๋์ด ๋ง์.
๋ด๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์คํ์์ค๋ฅผ ํผ์ฉํด์ ๋จ์ด๋ฅผ ์ฌ์ฉํ ์๋ ์๋๋ฐ ๋ ๋ค ๋๊ฐ์ ์๋ฏธ์ด๋๊น ๊ทธ๋ ๊ฒ ์์ธ์
์๋ฅผ๋ค์ด
- ๋ฌ๋ ฅ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ์ถ๋ค.
- ์์ ๋ฒํผ์ด๋ ์์ด์ฝ์ ์ถ๊ฐํ๊ณ ์ถ๋ค.
- ์ฌ์ง์ ํ์ฅ ํ์ฅ ์๋์ผ๋ก ๋๊ฒจ์ฃผ๋ ์ฌ๋ผ์ด๋๊ฐ ํ์ํ๋ค.
์ ๊ฐ์ ๊ธฐ๋ฅ๋ค์ ์ผ์ผ์ด ๊ตฌํํ ์๊ฐ์ด ์๋ค๋ฉด, ์คํ์์ค๋ฅผ ์ ๊ทน ํ์ฉํ๋ฉด ์ ๋ง ์๊ฐ์ ๋ง์ด ๋จ์ถ์ํฌ ์ ์์ง. ๊ทผ๋ฐ ์ด๋ป๊ฒ ์ฐพ์์ผํ ์ง ๋ชจ๋ฅด๊ฒ ๋ค๊ณ ? ๊ทธ๋ฅ ๊นํ๋ธ
์ ๊ฒ์ํ๋ฉด ๋ฐ๋ก ๋์
๋ฌ๋ ฅ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ฃผ๋ ์คํ์์ค
๋ฅผ ์ฐพ๊ฒ ๋ค ๊ทธ๋ฌ๋ฉด ๊นํ๋ธ์ ํต์ฌ ๋จ์ด๋ง ๊ฒ์ํ๋ฉด ๋ผ
react
+ calendar
๋ง ๊ฒ์ํ๋ฉด ๋ฐ๋ก ๋์ด
๊ทธ๋ฌ๋ฉด ์ด๋ฐ์์ผ๋ก ๋ฆฌ์กํธ ์บ๋ฆฐ๋ ์คํ์์ค๋ค์ด ์ญ์ฑ ๋์ค๋๋ฐ star
์๊ฐ ๋ง์ ๊ฒ์ ๋ค์ด๊ฐ๋ ์๊ด์๊ณ ๋๊ฐ ๋ง์์ ๋๋ ๊ณณ์ ๋ค์ด๊ฐ์ npm install
๋ก ๋ค์ด๋ฐ๊ณ , ์ฌ์ฉ๋ฒ๋ ๋๋ถ๋ถ README.MD
์ ๋ค ์ ํ์์ผ๋๊น ์ฐจ๊ทผ์ฐจ๊ทผ ์ฝ์ด๋ณด๊ณ ์ฌ์ฉํ๋ฉด ๋ผ
๋ณดํต star
์๊ฐ ๋ง์ ์คํ์์ค๊ฐ ๋ง์ ์ฌ๋๋ค์๊ฒ ์
์ฆ์ด ๋๋ค๋ ์๋ฆฌ๋๊น ๋ฏฟ๊ณ ์จ๋ ์ข์.
๊ทธ๋ฆฌ๊ณ ์ฌ์ฉํ๋ค๊ฐ ์ค๋ฅ๊ฐ์ ๊ฒ์ ๋๊ฐ ๋ฐ๊ฒฌํ๋ฉด ์ปจํธ๋ฆฌ๋ทฐํฐ๋ ๋ ์ ์๊ณ ์คํ์์ค ๊ฒฝํ๋ ํ ์ ์์ผ๋ ์ ๋ง ์ข๊ฒ ์ง?
๊ทธ๋ฆฌ๊ณ ๋ํ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ช ๊ฐ ์ธ์๋๋๊ฒ ํ๋ก์ ํธ ์งํํ๋๋ฐ์ ์๊ฐ์ ์ฝ์ ๋ง์ด ํ ์ ์์ด. ์ฐ์ ๊ธฐ์ต๋๋ ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋์ดํด๋ณผ๊ฒ
- ํ์ด์ง ์ด๋ ๊ตฌํ์ ๋์์ฃผ๋
react-router, react-router-dom
[link](https://github.com/ReactTraining/react-router\)- ๋น๋๊ธฐ HTTP ํต์ ์ ๋์์ฃผ๋
axios
link- ์คํ์ผ๋ง์ ๋์์ฃผ๋
styled-components
link- ์ ์ญ state ๊ด๋ฆฌ ๋๊ตฌ
redux, react-redux
link- ๋ฒํผ, ๋ฆฌ์คํธ, ์์ด์ฝ ๋ฑ๋ฑ ํํ์ด์ง ๊ตฌ์ฑ์ ๊ธฐ๋ณธ์ ์ธ ๊ฒ๋ค์ ์ ๊ณตํด์ฃผ๊ณ ๋์์ธ๋ ๊น๋ํ
material-ui
link- ํ ์คํ ์ ๋์์ฃผ๋
jest
link- ์ฝ๋๋ฅผ ๊น๋ํ๊ฒ ์ ๋ฆฌํด์ฃผ๋
prettier
link- ์ฝ๋์ ํ๋ฆฌํฐ๋ฅผ ๋์ฌ์ฃผ๋ ์ ์ ๋ถ์ ๋๊ตฌ
eslint
link
๋ฑ๋ฑ๋ฑ ์ด์ ๋๋ง ์ ์์๋ฌ๋ ํํ์ด์ง ๊ตฌ์ฑํ๋๋ฐ๋ ๋ฌธ์ ์๊ณ , ๊ทธ๋ ๊ทธ๋ ์์ ์ด ํ์ํ ๊ฒ์ ํ์ ํ๊ณ ๊ฒ์ํด์ ์ฌ์ฉํ๋ ๊ฒฐ๋จ์ ๋ด๋ฆฌ๋ ๊ฒ๋ ํ๋ก์ ํธ ์๋๋ฅผ ๋์ด๊ณ ํ๋ฆฌํฐ๋ฅผ ๋์ด๋ ๊ฒ์ ์ค์ํ ๊ฒ ๊ฐ์! ์ชผ์ฐ์์~ ์ค๋์ ์๊ธฐ๊น์ง - ๋ฟ โ๏ธ
์ฐ์ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ด ๋ญ๊น๋ถํฐ ์์์ผ๊ฒ ์ง์น
ํฌ๊ฒ ๋๋จํ๊ฑด ์๋๊ณ , ๋ง์ฝ ๋๊ฐ ์ด๋ ํ ์กฐ๊ฑด์ด ๋ง์กฑ๋ ๋๋ง ์ด๋ค ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ถ๋ค.
์๋ฅผ๋ค์ด ๋ณดํต ํ์๊ฐ์
๊ธฐ๋ฅ์ ๋ง๋ค ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ๊ณ , ํ์ธ ์ฐจ ๋น๋ฐ๋ฒํธ๋ฅผ ํ๋ฒ ๋ ์
๋ ฅํ๊ฒ ๋ง๋๋๋ฐ, 1์ฐจ์ 2์ฐจ ๋น๋ฐ๋ฒํธ๊ฐ ๊ฐ์ ๋๋ง ํต๊ณผ
๋ผ๋ ๋ฉ์ธ์ง๋ฅผ ๋์ฐ๊ณ ์ถ๋ค๋๊ฐ,
๋๊ฐ ๋ฏธ๋ ์ ํ๋ธ๋ฅผ ๋ง๋๋๋ฐ ํ๋ฉด์ด 1000px ์ด์์ผ ๋๋ ํ ์ค์ 4๊ฐ์ ์์์ ๋ณด์ฌ์ฃผ์ง๋ง, ๊ทธ๊ฒ๋ณด๋ค ์์์ง๋ฉด 2๊ฐ์ ์์๋ง ๋์ด๋ค๋๊ฐ์ ๊ฐ์ด
์ด๋ค ์กฐ๊ฑด์ ๋ฐ๋ผ์ ๋ค๋ฅธ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ธฐ๋ฅผ ์ํ ๋ ์ฌ์ฉํ๋ ์คํฌ์ด์ง. ๋ฆฌ์กํธ์ ์๋ง์ ํจํด์ค์ ๋ง์ด ์ฐ์ด๋ ํจํด์ด๋ผ ์ด๋ ๊ฒ ๋ค๊ณ ์์!
๋ฆฌ์กํธ์์ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ๊ตฌํํ ๋ ๋๋ ์ผํญ ์ฐ์ฐ์
๋ฅผ ์ ๋ง ๋ง์ด ์ฌ์ฉํด
์ผํญ ์ฐ์ฐ์
๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ค์ ํ๋์ธ๋ฐ, ?
๊ธฐํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ์ด์ง.
condition ? "condition์ด true์
๋๋ค." : "condition์ด false์
๋๋ค."
์์ ์์๊ฐ ์ผํญ ์ฐ์ฐ์
๊ฐ๋จํ ์์์ธ๋ฐ, condition ์ด๋ผ๋ ์กฐ๊ฑด์ ๊ธฐ์ค์ผ๋ก
:
๊ธฐํธ๋ฅผ ์ฌ์ด์๋๊ณ ์ผ์ชฝ์ true์ผ ๋, ์ค๋ฅธ์ชฝ์ false์ผ ๋ ํ์๋๋ ๊ฒ์ ์๋ฏธํด
๊ฐ๋จํ ์ผํญ ์ฐ์ฐ์
์ ๋ํด์ ์์์ผ๋๊น, ๋ฆฌ์กํธ์์ ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง ํ์ธํด๋ณด์๊ตฌ
Counter.jsx
๊ฐ๋จํ ์นด์ดํฐ ์์ ๋ก ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ๋ณด์ฌ์ค๊ฒ
์ด๋ ค์ด ๊ฑด ์์ด count state
๋ฅผ ์์ฑํ๊ณ ๋ฒํผ์ ํด๋ฆญํ๋ฉด 1์ฆ๊ฐ ํ๊ฑฐ๋, 1๊ฐ์ ํ๊ฑฐ๋ ํ๋ ๊ธฐ๋ฅ์ด์ง
๊ทธ๋ฆฌ๊ณ return
๋ถ๋ถ์์ {count > 5 ? <div>5๊ฐ ๋์๋ค!</div> : <div>5๋ฅผ ๋ชป๋์์ด...</div>}
์ด ๋ถ๋ถ์ด ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ๋ณด์ฌ์ฃผ๋ ๋ถ๋ถ์ด์ผ.
count > 5
์์ ์กฐ๊ฑด์ ํ์ธํ๊ณ ์กฐ๊ฑด์ด ๋ง๋ค๋ฉด <div>5๊ฐ ๋์๋ค!</div>
๋ฅผ ํ์ํด์ฃผ๊ณ ,
์๋๋ผ๋ฉด <div>5๋ฅผ ๋ชป๋์์ด...</div>
์ ๋ณด์ฌ์ฃผ๋ ์ ๋ง ๊ฐ๋จํ ์์ ์ด์ง
HTML ํ๊ทธ๊ฐ ๋ค์ด๊ฐ ์ ์๋ค๋ ๊ฑด ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ค ์๋ ์๋ค๋ ์๊ธฐ์ผ
์ ๋ง ์์ฃผ ์ฌ์ฉ๋๋๊น ์์๋๋ฉด ์ข์!
๋ฆฌ์กํธ์์ ํ๋ก์ ํธ๋ฅผ ์งํ์ ํ๋ค๋ณด๋ฉด ๋ฆฌ์คํธ
๋ก state๋ฅผ ๋ง๋ค๊ฑฐ๋, ๋ฆฌ์คํธ
๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ ๋ง ๋ง์๋ฐ ๊ทธ๋ด๋๋ ์ด๋ค์์ผ๋ก ์ฝ๋๋ฅผ ์ง๋์ง, ์ฃผ์ํ ์ ์ ๋ฌด์์ด ์๋์ง ํ์ธํด๋ณด์๊ตฌ
์ ์์ ์์ initialList
๋ฐฐ์ด์ ๋ง๋ค์ด์ ์ถ๋ ฅ์ ํ๋ ๋ชจ์ต์ด์ผ.
์ ์ฒ๋ผ ์ถ๋ ฅ์ ํด๋ ํฌ๊ฒ ์๊ด์ด ์์ง๋ง, ๋์ค์ ๋ฐฐ์ด์ด ์์ฒญ ์ปค์ง๋ค๋ฉด ์ผ์ผ์ด ์ ๋ ๊ฒ ํด ์ค ์์์ง.
์๋ฐ์คํฌ๋ฆฝํธ์ map
ํจ์๋ฅผ ์ด์ฉํด์ ๋ฆฌ์คํธ๋ฅผ ๋น ๋ฅด๊ฒ ์ถ๋ ฅํ ์ ์์ง.
map
ํจ์๋ ๋ฐฐ์ด์ ๋๋ฉด์ ํ๊ณ ์ถ์ ๋์์ ํ ์๊ฐ ์์ด
์ ์ฝ๋๋ item
์ด๋ผ๋ ๋ณ์๊ฐ ๋ฐฐ์ด์ ์ธ๋ฑ์ค ํ๋ํ๋์ฉ ๋ ๋ ๋ฆฌ์คํธ ์์ดํ
์ ๋ด์์ค ๋ณ์์ผ
์ด๋ฆ์ ์๊ธฐ๊ฐ ์ง๊ณ ์ถ์๋๋ก ์ง์ผ๋ฉด ๋ผ.
์ ์์ ์ผ๋ก ์ถ๋ ฅ์ด ์ ๋๋๊ฒ์ ๋ณผ ์ ์์ง.
๊ทธ๋ฐ๋ฐ ํ๋ ๋ฌธ์ ๊ฐ ์์ด
์ ๋ ๊ฒ๋ง ์ฝ๋ฉ์ ํ๋ค๋ฉด ๋ฌด์กฐ๊ฑด ๋จ๊ฒ๋๋ ๊ฒฝ๊ณ ๋ฉ์ธ์ง๊ฐ ์์ด
์ ๊ฒฝ๊ณ ๋ฉ์ธ์ง๋ ์ค๋ฅ ๋ฉ์ธ์ง
๊ฐ ์๋์ผ. ๊ฒฝ๊ณ ๋ฉ์ธ์ง์ด์ง. ๋ฌด์๋ฅผ ํด๋ ๋์์ ํ๋ค๋๊ฑฐ์ผ
๊ทธ๋์ ๋ฌด์ํด๋ ๋๋ค? ๋ฌด์ํด๋ ์๊ด์ ์์ด. ๊ทธ๋ผ ์ด๋ค ํ๋ํฐ๊ฐ ์ฃผ์ด์ง๋๊น ์ ๋ ๊ฒ ๊ฒฝ๊ณ ๋ฅผ ํด์ฃผ๋ ๊ฑฐ๊ฒ ์ง?
ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ map
ํจ์์์ ๋ฐ๋ณต๋๋ ์์์ key props
๋ฅผ ์ฃผ๋ฉด ๋ผ
{list.map((item) => {
return <div key={item.id}>{item.name}</div>;
})}
์ฐ๋ฆฌ๋ div
๊ฐ ๋ฐ๋ณต์ด ๋๋๊น div
์ key props
๋ฅผ ๋ถ์ฌํ ๊ฒ์ ๋ณผ ์ ์์ด.
key
๋ ๊ณ ์ ๊ฐ์ ๋ถ์ฌ๋ฅผ ํด์ฃผ์ด์ผ ํด. ๊ทธ๋์ ์ฐ๋ฆฌ๋ id
๊ฐ์ ์ค ๊ฒ์ ๋ณผ ์ ์์ง.
๊ทธ๋ผ key
๋ ์์ค์ผ ํ๋๊ฑธ๊น?
React๋ key ์์ฑ์ ์ง์ํฉ๋๋ค. ์์๋ค์ด key๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด, React๋ key๋ฅผ ํตํด ๊ธฐ์กด ํธ๋ฆฌ์ ์ดํ ํธ๋ฆฌ์ ์์๋ค์ด ์ผ์นํ๋์ง ํ์ธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ๋นํจ์จ์ ์ธ ์์์ key๋ฅผ ์ถ๊ฐํ์ฌ ํธ๋ฆฌ์ ๋ณํ ์์ ์ด ํจ์จ์ ์ผ๋ก ์ํ๋๋๋ก ์์ ํ ์ ์์ต๋๋ค.
https://ko.reactjs.org/docs/lists-and-keys.html
๊ณต์๋ฌธ์์ ๋์์๋ key
์ ๋ํ ๊ธ์ด์ผ. ํจ์จ์ ์ผ๋ก ๋ ๋๋ง์ ํด์ฃผ๊ธฐ ์ํด์ ์กด์ฌํ๋ค๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ์.
๊ทธ๋ฌ๋ฉด key
๊ฐ์ ์ด๋ค ๊ฐ์ผ๋ก ์ค์ผํ ์ง ๊ฐ์ด ์์กํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ
์์ ์์์ฒ๋ผ id
๊ฐ์ ๋ถ์ฌํด์ ์ฃผ๋ ๋ฐฉ๋ฒ๋ ์๊ณ , ์ตํ์ ์๋จ์ผ๋ก ๋ฐฐ์ด์ index
๋ฅผ ์ฃผ๋ ๋ฐฉ๋ฒ๋ ์๋ค๊ณ ํด. ๊ทผ๋ฐ ์๊ธฐ์ ๋ํด์ ๊ณต์๋ฌธ์์๋ ๋ถ์ ์ ์ธ ์๊ฒฌ์ด์ผ.
์ตํ์ ์๋จ์ผ๋ก ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ key๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ง์ฝ ํญ๋ชฉ๋ค์ด ์ฌ๋ฐฐ์ด๋์ง ์๋๋ค๋ฉด ์ด ๋ฐฉ๋ฒ๋ ์ ๋์ํ ๊ฒ์ด์ง๋ง, ์ฌ๋ฐฐ์ด๋๋ ๊ฒฝ์ฐ ๋นํจ์จ์ ์ผ๋ก ๋์ํ ๊ฒ์ ๋๋ค.
์ธ๋ฑ์ค๋ฅผ key๋ก ์ฌ์ฉ ์ค ๋ฐฐ์ด์ด ์ฌ๋ฐฐ์ด๋๋ฉด ์ปดํฌ๋ํธ์ state์ ๊ด๋ จ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ปดํฌ๋ํธ ์ธ์คํด์ค๋ key๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐฑ์ ๋๊ณ ์ฌ์ฌ์ฉ๋ฉ๋๋ค. ์ธ๋ฑ์ค๋ฅผ key๋ก ์ฌ์ฉํ๋ฉด, ํญ๋ชฉ์ ์์๊ฐ ๋ฐ๋์์ ๋ key ๋ํ ๋ฐ๋ ๊ฒ์
๋๋ค. ๊ทธ ๊ฒฐ๊ณผ๋ก, ์ปดํฌ๋ํธ์ state๊ฐ ์๋ง์ด ๋๊ฑฐ๋ ์๋ํ์ง ์์ ๋ฐฉ์์ผ๋ก ๋ฐ๋ ์๋ ์์ต๋๋ค.
https://ko.reactjs.org/docs/reconciliation.html#recursing-on-children
๊ทธ๋ ๋ค๊ณ ํ๋ค.. ์์ธํ ๋ด์ฉ๋ค์ ๊ณต์๋ฌธ์๋ฅผ ์ดํด๋ณด๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ!
์, ์๊ธฐ์ index
๋ id
๋ ๋ฌด์จ ์ฐจ์ด๋๊ณ ํ ์๋ ์๋๋ฐ ๋์ ๋ฌ๋ผ.
index
๋ ๋ฐฐ์ด์ด ๋ง์ฝ์ ๋ณํ๋ค๋ฉด, ์์๋ค๋ง๋ค index
๊ฐ์ด ๋ณํ ํ
์ง๋ง,
id
๊ฐ์ ์ฒ์๋ถํฐ ์ฃผ์ด์ง ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ด ๋ณํ๋ค ํ๋๋ผ๋, id
๊ฐ์ ๊ทธ๋๋ก์ด๊ธฐ ๋๋ฌธ์ ๋ ๋๋ง ์ฑ๋ฅ์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ์.
์๊ธฐ๊น์ง ์ฝ์๋ค๋ฉด, ๋ฆฌ์กํธ ์กฐ๊ธ ๋ค๋ฃฐ ์ค ์๋ค ์ ๋? ์์ง ๋งํ ๊ฒ์ด ๋ง์ง๋ง
๋ ์ด์ ์๊ธฐ๋ฅผ ํ๋ค๋ฉด ์ ๋ง์ ๋ง ๊ธธ์ด์ง ๊ฒ ๊ฐ๊ณ ๋ ๋ํ ๋ชจ๋ฅด๋ ๊ฒ์ด ๋ง๊ธฐ ๋๋ฌธ์
๊ณต๋ถ๋ฅผ ํ๋ ๊ฒธ ์ ๋ฆฌ๋ฅผ ํด๋ดค์๋๋ ๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ๊ตฐ์ ๋ค๋ค๋ค๋ค ํ์ดํ ~