React Hook
React Hook ์ด๋
React v16.8์ ๋์ ๋จ, ๊ธฐ์กด ๋ฐฉ์์ ๋ช๊ฐ์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
ํจ์ํ ์ปดํฌ๋ํธ์ ๋ฆฌ์กํธ์ ๋ค๋ฅธ ๊ธฐ๋ฅ๋ค์ ๊ฐ๊ณ ๋ฆฌ์ฒ๋ผ ์ฐ๊ฒฐํด์ฃผ๋ ์ญํ ์ ํ์ฌ
Hook
์ด๋ผ ๋ช ๋ช
Hook ํ์ ๋ฐฐ๊ฒฝ
๊ธฐ์กด ๋ฐฉ์์ ๋ฌธ์ ์
Wrapper Hell(HOC)
๊ธฐ์กด ์ปดํฌ๋ํธ๋ฅผ ์๋ก์ด ์ปดํฌ๋ํธ๋ก ๊ฐ์ธ์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ
ํ ์ด ๋์ค๊ธฐ ์ด์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด ์ฌ์ฉ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด ํจํด์ ๋จ์ฉํ๋ฉด, ์ปดํฌ๋ํธ์ ๊ณ์ธต ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ ธ ์ ์ง๋ณด์์ ๋๋ฒ๊น ์ด ์ด๋ ค์์ง๋ค.
Huge Components
์ปดํฌ๋ํธ๊ฐ ์ปค์ง์๋ก ํด๋์ค ๋ด์ ๋ก์ง(์ํ, ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋)๋ฑ ์ฝ๋๊ฐ ๋น๋ํด์ง๊ธฐ ์ฝ๋ค. ์ด๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ณ ์ ์ง๋ณด์์ฑ์ ์ด๋ ต๊ฒ ๋ง๋ ๋ค
Confusing Classes
ํด๋์ค์ ๋ณต์ก๋ ๋ฌธ์ (๋์ ๋ฌ๋์ปค๋ธ, this ๋ฐ์ธ๋ฉ ๋ฑ)
Hook์ ๋์ ์๋ฆฌ
Virtual DOM์์ ํธ์ถ๋๋ ํจ์๋ค์ ํญ์ ๊ฐ์ ์์์ ๊ฐฏ์๋ก ํธ์ถ๋๋ค.
ํจ์ Component๊ฐ ํธ์ถ๋ ๋ค์ Hook์ด ํจ์ ์์์ ํธ์ถ๋๋ฏ๋ก ์ด Index๊ฐ ๋ง์๋จ์ด์ง๋ค๋๊ฒ์ด ํต์ฌ์ด๋ค. ์์๊ฐ ๋งค์ฐ ์ค์ํ๊ณ ๊ทธ ์์ ๋ณด์ฅ์ React์ createElement๋ก ๋ง๋ค์ด์ง ๊ฐ์ฒด ์์์ ๋ฉ์ปค๋์ฆ๊ณผ ๋ง๋ฌผ๋ ค ์๋ค. โ ํจ์๊ฐ ํธ์ถ๋๋ ์์ === ํ ์ ์ ์ฅํ ์ ์ฅ ๊ณต๊ฐ์ ํฌ์ธํฐ ์ญํ
์ฆ, React๊ฐ Hook์ด ํธ์ถ๋๋ ์์์ ์์กดํ๋ฉฐ, ๋ชจ๋ ๋ ๋๋ง์์ Hook์ ํธ์ถ ์์๋ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ ์ ์๋ค๋ ๊ฒ
์ด๋ฐ ํต์ฌ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๊ธฐ ์ํด์๋ ๋ช๊ฐ์ง ๊ท์น์ด ์๋ค.
์ต์์์์๋ง Hook์ ํธ์ถํด์ผ ํ๋ค.
๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ, ์ค์ฒฉ๋ ํจ์ ๋ด์์ ํธ์ถ โ
์ค์ง ํจ์ํ ์ปดํฌ๋ํธ ๋ด์์๋ง Hook์ ํธ์ถํด์ผ ํ๋ค.
์ผ๋ฐ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์ or ํด๋์ค ์ปดํฌ๋ํธ ๋ด์์ ํธ์ถ โ
ํด๋์คํ ์ปดํฌ๋ํธ๋ Hook์ ์ธ ์ ์๋ค?
ํด๋์ค๋ ์ต์ด์ instance๋ฅผ ๋ง๋ ๋ค์ ์ ๋ฐ์ดํธ ๋ ๋ instance๋ฅผ ์๋ก ๋ง๋๋ ๊ฒ์ด ์๋ ๊ทธ instance ์์ฒด๊ฐ ์ ๋ฐ์ดํธ ๋๋ ๊ตฌ์กฐ์ฌ์ Hook์ ํธ์ถ ์์ ์ ๋ง๋ค์ด ๋ผ ์ ์๋ค.
์ฆ, ์์๊ฐ ์ด๋ป๊ฒ ๋๋์ง ๋ฐ๊นฅ์ชฝ์ธ createElement ์ ์ฅ์์ ์ ํ ์ ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค.
useEffect
Side-Effect(๋ถ์ํจ๊ณผ)๋ฅผ ๋ค๋ฃจ๋ ํ ์ผ๋ก ์์กด์ฑ ๋ฐฐ์ด์ ํตํด ์ธ์ ์ด๋ค Effect๋ฅผ ํธ์ถ ํ ์ง ์ ์ธํ ์ ์๋ค.
๋ ๋๋ง ์ดํ์ ํด์ผํ ์ผ, ์ฆ React ์ธ๋ถ์ ๊ด๋ จ๋ ์ผ์ ์ ํ ์ ์๋ค.
React๋ ๋ ๋๋ง์ด ๋ชจ๋ ์๋ฃ๋๊ณ ๋์ Effect ํจ์๋ค์ด ์คํ๋๋ค. ์ฆ, ์ดํํธ ํจ์๋ค์ ๋ ๋๋ง ๊ณผ์ ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค๋ ๊ฒ
useEffect๋ ๋ผ์ดํ ์ฌ์ดํด ๋ฉ์๋๊ฐ ์๋๋ค??
์ ๊ฐ
useEffect
ํ ์ ํด๋์ค ์ปดํฌ๋ํธ์ ๋ผ์ดํ์ฌ์ดํด์ด๋ผ๋ ์ต์ํ ํ๋ฆฌ์ฆ์ ํตํด ๋ฐ๋ผ๋ณด๋ ๊ฒ์ ๊ทธ๋ง๋์ ๋ชจ๋ ๊ฒ์ด ๋ช ๋ฐฑํ๊ฒ ๋ค๊ฐ์์ต๋๋ค. - Dan Abramov
Dan Abramov๋ ๋ฆฌ์กํธ์์ useEffect ํ ์ ์ฌ์ฉํ ๋, ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋์๋ ๋ค๋ฅธ ์๋ก์ด ์ ๊ทผ๋ฒ "thinking in effects"๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ๊ฐ์กฐํ๊ณ ์๋ค.
useEffect ํ ์ ์ปดํฌ๋ํธ์ ๋ผ์ดํ์ฌ์ดํด(๋ง์ดํธ, ์ธ๋ง์ดํธ, ์ ๋ฐ์ดํธ)๋ฅผ ๊ธฐ์ค์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ์๋ ๋ถ์ํจ๊ณผ(Side Effect)๋ฅผ ์ฒ๋ฆฌํ๋ ์ฉ๋๋ก ์ค๊ณ๋์๊ธฐ ๋๋ฌธ์ด๋ค.
์ปดํฌ๋ํธ๊ฐ ์ด๋ค Effect๋ฅผ ์ผ์ผํค๋์ง ์ด์ ์ ๋ง์ถฐ useEffect๋ฅผ ์ฌ์ฉํด์ผํ๋ค๋ ๊ฒ์ ๋ช ์ฌํ์.
Effect๋ ํธ์ถ๋ ์์ ์ state์ props๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์๋ค.
React์์ ์ํ(state)๋ ์์ฑ(props)์ด ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ์ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ๊ฒ ๋๋ค. ์ด๋, ์ํ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ๋ฆฌ๋ ๋๋ง์ ์ํํ๋ ๊ฒ๋ ๋ถ์ํจ๊ณผ(Side Effect) ์ค ํ๋์ด๋ค.
๋ถ์ํจ๊ณผ๋ฅผ ์ผ์ผํค๋ ํจ์๋ ์ดํํธ ํจ์(Effect Function)๋ก, ํน์ ์์กด์ฑ ๋ฐฐ์ด์ ํตํด ์ค์ ๋์ด ํด๋น ์์ ์ ์ํ(state)์ ์์ฑ(props)์ ๋ฐ๋ผ๋ณด๊ณ ํธ์ถ๋๋ค.
์์กด์ฑ ๋ฐฐ์ด์ด๋
๋ ๋๋ง ๋จ๊ณ์์ ์ฌ์ฉ๋๋ ๊ฐ ์ค, Effect ํจ์์์ ์ฐธ์กฐ๋๋ ๊ฐ๋ค์ ๋ชจ๋ ํฌํจํ๋ ๋ฐฐ์ด React์๊ฒ ์ดํํธ ํจ์์์ ์ฌ์ฉ๋๋ ๊ฐ๋ค์ ์ ๋ถ๋ฅผ ์๋ ค์ฃผ๋ ํํธ๋ก ์์ฉํ๋ค.
์์กด์ฑ ๋ฐฐ์ด(dependency array)์ ์ฌ์ฉํ์ฌ ์ด๋ค ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง Effect ํจ์๊ฐ ์คํ๋๋๋ก ์ง์ ํ ์ ์๋ค.
์์กด์ฑ ๋ฐฐ์ด์ ํฌํจ๋ ๊ฐ์ด ๋ณํ ๋๋ง ํธ์ถ๋๋ฏ๋ก ํ์ํ ๊ฐ๋ง ์ถ๊ฐํ์ฌ ๋ถํ์ํ ์ดํํธ ํจ์ ํธ์ถ์ ๋ฐฉ์งํ์.
cleanup ํจ์์ ๋ชฉ์
cleanup ํจ์์ ๋ชฉ์ ์ ๊ตฌ๋ (subscribe)๊ณผ ๊ฐ์ ์ดํํธ๋ฅผ ์ทจ์ํ๊ฑฐ๋ ์ ๋ฆฌํ๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋จ
ํด๋ฆฐ์
ํจ์ ํน์ง
ํด๋ฆฐ์ ํจ์๋ ๋ค์ ๋ ๋๋ง ์ดํํธ ํจ์๊ฐ ์คํ๋๊ธฐ ์ ์ ํธ์ถ๋๋ค.
ํด๋ก์ ๋ฅผ ํตํด ํด๋ฆฐ์ ํจ์๊ฐ ์ ์๋ ์์ ๋ ๋๋ง์ ์๋ ๊ฐ์ ๋ฐ๋ผ๋ณธ๋ค.
ํด๋ฆฐ์
ํจ์ ์ฅ์
๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง: Effect ํจ์์์ ๋ฑ๋กํ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ ํ์ด๋จธ ๋ฑ์ ์์์ ํด๋ฆฐ์ ํจ์์์ ํด์ ํจ์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฑ๋ก/ํด์ ๊ฐ์ํ: Effect ํจ์์์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฑ๋ก ํ ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋๋ฉด ํธ๋ค๋ฌ๋ฅผ ํด์ ํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ ํด๋ฆฐ์ ํจ์์์ ์ฒ๋ฆฌํ ์ ์๋ค.
React StrictMode ๋
React ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์ค์ ๋ฐ๊ฒฌ๋๋ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ํ์ ํ ์ ์๋๋ก ๊ฒ์ฌํด์ฃผ๋ ๋๊ตฌ
Strict ๋ชจ๋๋ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ง ๋์ํ๊ณ , ํ๋ก๋์ ํ๊ฒฝ์์๋ ์๋์ผ๋ก ๋นํ์ฑํ ๋๋ค.
StrictMode ๊ธฐ๋ฅ
๋ ๋๋ง ์ค์ ์ค๋ณต๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๊ฐ ์คํ๋๋ ๊ฒ์ ๋ฐฉ์ง
์ ํ๋ฆฌ์ผ์ด์ ๋ด ์์์น ๋ชปํ Side-Effect๋ฅผ ๊ฒฝ๊ณ
setState() ํธ์ถ ์, ๋น๋๊ธฐ์ ์ธ ์ ๋ฐ์ดํธ์์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ๊ฒฝ๊ณ
๋ ์์ธํ ์ค๋ฅ ์ ๋ณด๋ฅผ ์ ๊ณต
React StrictMode ํ์ฑํ์ Effect๊ฐ ๋ ๋ฒ ์คํ๋๋ค?
StrictMode ๊ฒ์ฌ ๋๊ตฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ด ์์์น ๋ชปํ ๋ถ์ํจ๊ณผ๋ฅผ ์ฐพ์ผ๋ ค๊ณ Effect ๋ฑ์ ๋ ๋ฒ์ฉ ํธ์ถํ๋ค.
*StrictMode๊ฐ ํธ์ถํ๋ Effect๋ ๋ ๋๋ง๋ ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
Last updated