3. React
ํ์ต ํค์๋
React๋?
์ปดํฌ๋ํธ
๋ฆฌ๋ ๋๋ง
IoC(Inversion of Control)
Library vs Framework
์ฌ์กฐ์
ํธ๋ฆฌ์ ๊ฐ์ ์์น์ ์๋ ์๋ฆฌ๋จผํธ ํ์ ์ด ์ด์ ๋ ๋๋ง๊ณผ ๋ค์ ๋ ๋๋ง ์ฌ์ด์ ์ผ์นํ๋ฉด
React๋ ๊ธฐ์กด ํธ์คํธ ๊ฐ์ฒด๋ฅผ ๋ค์ ์ฌ์ฉ.
์ ์ด์ ์ญ์
์ ์ง์ ์ปดํฌ๋ํธ๋ฅผ ํธ์ถํ์ง ์๋ ๊ฑฐ์ง? ์ Form()
๋์ <Form />
์ด๋ผ๊ณ ์จ์ผ ํ๋ ๊ฑฐ์ผ?
React๋ React๊ฐ ์ปดํฌ๋ํธ์ ๋ํด ์๋ ๊ฒ์ด ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ React ์๋ฆฌ๋จผํธ ํธ๋ฆฌ๋ง ๋ณด๋ ๊ฒ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
์ปดํฌ๋ํธ๋ ํจ์ ์ด์์ ์ญํ ์ ํ๋ค. react๋ ์ํธ ์์ฉ์ ๋ํ ์๋ต์ผ๋ก UIํธ๋ฆฌ๋ฅผ ๋ ๋ํ๋ค. ์ปดํฌ๋ํธ๋ฅผ ์ง์ ํธ์ถํ๋ฉด ์ด ๊ธฐ๋ฅ์ ์ง์ ๊ตฌ์ถํด์ผํ๋ค. ์ถ์ํ๋ฅผ ์ ๊ณตํ๋ค๊ณ ๋ณผ ์ ์๋ค.
์ปดํฌ๋ํธ ํ์ ์ผ๋ก ์ฌ์กฐ์ . ํธ๋ฆฌ์ ๊ฐ๋ ๊ตฌ์กฐ๋ฅผ ๋ ๋ง์ด ์๋ ค์ค ์ ์๋ค.
react๊ฐ ์ฌ์กฐ์ ์ ์ง์ฐํ ์ ์๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ์ปดํฌ๋ํธ ํธ์ถ ์ฌ์ด์์ ์ผ๋ถ ์์ ์ ํ ์ ์๊ฒ๋์ด ํฐ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ๋ค์ ๋ ๋๋ง ํ๋๋ผ๋ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ๋ฉ์ถ์ง ์๊ฒ ํ ์ ์๋ค. ์ด๋ฅผ ์๋์ผ๋ก ์กฐ์จํ ํ์์๋ค.
๋๋ฒ๊น ์ปดํฌ๋ํธ๊ฐ ์ผ๊ธ ๊ฐ์ฒด๋ผ๋ฉด ๋์ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ๋ง๋ค ์ ์๋ค.
๋ง์ง๋ง ์ด์ ์ ์ง์ฐ ํ๊ฐ์ด๋ค.
์ง์ฐํ๊ฐ
์ปดํฌ๋ํธ๋ก ํํํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์ด๋๊ฐ์์ ์ฌ์ฉ๋๊ธฐ ์ ๊น์ง ์คํ๋์ง ์๋๋ค.
์กฐ๊ฑด์ ๋ฐ๋ผ ํจ์๋ฅผ ์ผ์ฐ ์ข ๋ฃ์ํฌ ์ ์๋ค.
ํจ์๋ฅผ ์ง์ ํธ์ถํ๋ฉด page ์ปดํฌ๋ํธ๊ฐ ๊ทธ๋ฆฌ๊ธธ ์์น ์์๋ ์ฆ์ ์คํ๋จ.
๊ฒฐ๋ก ์ ์ผ๋ก ์ปดํฌ๋ํธ๋ก ์์ฑํ๋ฉด react๊ฐ ํธ์ถ ์์ ์ ๊ฒฐ์ ํ ์ ์๋ค.
๋ถํ์ํ ๋ ๋๋ง์ ํผํ๊ณ ์ฝ๋์ ์ทจ์ฝ์ฑ์ ์ค์ผ ์ ์๋ค.
setState ํธ์ถ์ ์ฆ์ ๋ ๋๋ง์ ๋ฐ์์ํค์ง ์๋๋ค.
๋ถํ์ํ ๋ ๋๋ง์ ํ์ง ์๋๋ก.
์ผ๊ด ๊ฐฑ์ ์ ์ฑ๋ฅ์ ์ข์ง๋ง ์๋์ ๊ฐ์ ์ฝ๋๋ ๋ฌธ์ ๊ฐ ๋๋ค.
์ด ์ฝ๋๋ ์ธ๋ฒ์ setCount(1)์ ํธ์ถํด๋ฒ๋ฆฐ๋ค.
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐฑ์ ํจ์๋ฅผ ์ธ์๋ก๋ ๋ฐ๋๋ค.
React๋ ๊ฐฑ์ ํจ์๋ค์ ํ์ ์์๋๊ณ ๋์ค์ ์์๋๋ก ์คํํ๋ค.
count ๊ฒฐ๊ณผ๋ 3์ด๋ค.
์ํ ๋ก์ง์ด ๋ณต์กํด์ง๋ค๋ฉด ์ง์ญ ์ํ๋ฅผ useReducer ํ ์ผ๋ก ์ฌ์ฉํ๊ธธ ๊ถ์ฅํ๋ค.
ํธ์ถ ํธ๋ฆฌ
React๋ JS ์ฝ์คํ๊ณผ ๋ฐ๋ก ๋ด๋ถ์ ์ธ ์์ฒด ์ฝ์คํ์ด ์๋ค.
ํ์ฌ ๋ ๋๋ง ํ๊ณ ์๋ ์ปดํฌ๋ํธ๋ฅผ ๊ธฐ์ตํ๊ธฐ ์ํ.
React์ UI ํธ๋ฆฌ๋ค์ ์ํธ์์ฉ ํ๊ธฐ์ํด ๊ณ์ ์ด์์์ด์ผ ํ๋ค.
DOM์ ์ฒซ ๋ฒ์งธ React.DOM.render() ํธ์ถ ํ ์ฌ๋ผ์ง์ง ์๋๋ค.
์ปจํ
์คํธ
๋ชจ๋ ์ปดํฌ๋ํธ์ ๊น์ ์์์ props๋ฅผ ์ ๋ฌํ๋๊ฒ์ ๋ฒ๊ฑฐ๋กญ๋ค.
์ปดํฌ๋ํธ๋ฅผ ์ํ ๋์ ์ค์ฝํ์ ์ ์.
SomeDeeplyNestedChild๊ฐ ๋ ๋๋ง ๋ ๋ useContext(ThemeContext)์ ํธ๋ฆฌ์์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ถ๋ชจ
<ThemeContext.Provider>๋ฅผ ์ฐพ๊ณ value๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํธ๋ฆฌ์์ ThemeContext.Provider๋ฅผ ์ฐพ์ง ๋ชปํ๋ค๋ฉด useContext(ThemeContext)๋
createContext() ํธ์ถ์ ๋ช
์๋ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉ. ์ ์์ ์์๋ 'light'
useEffect
useEffect์ Dependency array๋ฅผ ์ด์ฉํด ์ต์ ํ๋ฅผ ํ๋๋ฐ
JS ํด๋ก์ ์ ์ต์ํ์ง ์์ผ๋ฉด ์ฑ๊ธํ ์ต์ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
handleChange๊ฐ ๋ฐ๋๋๋ผ๋ ๋ค์ ์คํ๋์ง ์๋๋ฐ,
handleChange๋ ๋ค๋ฅธ props๋ ์ํ๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
๊ฐฑ์ ์ ํ์ฉํ์ง ์๋๋ค๋ฉด handleChange๋ ๊ณ์ ์ฒซ๋ฒ์งธ ๋ ๋๋ง์ ์๋ ์ํ๋ฅผ ์ฐธ์กฐํด
count๋ ๋ด๋ถ์์ ํญ์ 0์ด ๋๋ค. ์๋์ฒ๋ผ ์์กด์ฑ ๋ฐฐ์ด์ ์ถ๊ฐํด์ค๋ค.
์ฝ๋์ ๋ฐ๋ผ ๋ ๋๋ง ํ ๋๋ง๋ค ํ์์๋ HandleChange ๋๋ฌธ์ ํ์ ์๋ ๊ตฌ๋ ์ด ๋ฐ์ํ๋ฉด
useCallback ํ ์ผ๋ก ํด์ํ ์ ์๋ค.
Custom hook
์ปดํฌ๋ํธ ์ฌ์ด์ ์ํ๊ฐ ์๋ ๋ก์ง์ ์ฌ์ฌ์ฉํ ์ ์๊ฒ ํจ.
์ํ๋ ์ปดํฌ๋ํธ๋ณ๋ก ๋ ๋ฆฝ์ (ํ ์ ํธ์ถํ ๋๋ง๋ค ๊ฒฉ๋ฆฌ๋ ์ํ๋ฅผ ์ ์ธํจ)
React ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ๊ฐ, ํ๋ ์์ค์ธ๊ฐ (์ธ๋ฐ์์)
์ ์ด์ ์ญ์ ์ ์ด์ฉํด ์ํ์ ์ ๋ฐ์ดํธ๊ฐ ์ฝํ ๋ณต์กํ ์ํฉ์ ๊ฐ๋จํ ์ ์ธํ UI๋ก ๊ตฌ์ฑํ๋๊ฒ Framework์ ์ฃผ์ ํน์ง.
์๋ฌด๋ ๋งค๋ฒ root๋ฅผ renderํ๋ ๋ฐฉ์์ผ๋ก ์ฐ์ง ์๋๋ค.
ํ๋ ์์ค์ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
Last updated