React์ Hook
ํ์ต ํค์๋
React Hook ์ด๋
HOC ๊ณ ์ฐจ ์ปดํฌ๋ํธ
React Hook
Hook
์ ๋ฆฌ์กํธ v16.8์ ์๋ก ๋์ ๋ ๊ธฐ๋ฅ์ด๋ค.ํด๋์คํ ์ปดํฌ๋ํธ ๊ณ ์ ๊ธฐ๋ฅ์ธ ์ํ(state)๊ด๋ฆฌ์ ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํจ์ํ ์ปดํฌ๋ํธ์์๋ ์ธ ์ ์๋๋ก ํด์ฃผ๋ ํจ์๋ค์ ์ด์นญํ๋ค.
๐ React Hook์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ ํด๋์คํ ์ปดํฌ๋ํธ(Class Component)์ ํจ์ํ ์ปดํฌ๋ํธ(Functional Component)๋ก ๋๋๋ค. ๊ธฐ์กด์ ๊ฐ๋ฐ๋ฐฉ์์ ์ผ๋ฐ์ ์ผ๋ก ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ์ฃผ๋ก ์ฌ์ฉํ๋ state์ด๋ Life Cycle Method๋ฅผ ์ฌ์ฉํด์ผ ํ ๋์๋ง ํด๋์คํ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ด์๋ค.
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ ๋ช๊ฐ์ง ๋ฌธ์ ์ ๋ค์ด ์์๋ค.
๐จ Wrapper Hell (์ํ๋ก์ง์ ์ฌ์ฌ์ฉ์ฑ ์ด๋ ค์)
๋ฆฌ์กํธ๋ฅผ ์ฐ๋ค ๋ณด๋ฉด ์์ฃผ ์ฐ๋ ๋ก์ง์ ๋ฐ๋ก ๋นผ๋ด์ ์ฌ์ฉํ ํ์๊ฐ ์๋๋ฐ HOC(High Order Component)๋ฅผ ์ด์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
๐ HOC(High Order Component) ๊ณ ์ฐจ ์ปดํฌ๋ํธ ํ๋ฉด์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ก์ง๋ง์ ๋ถ๋ฆฌํด์ component๋ก ๋ง๋ค๊ณ , ์ฌ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ UI์ ๊ฐ์ ๋ค๋ฅธ ๋ถ๋ถ์ Parameter๋ก ๋ฐ์์ ์ฒ๋ฆฌํ๋๋ก ํ๋ ํจํด โ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ์ธ์๋ก ๋ฐ์์ ์๋ก์ด ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌํดํ๋ ํจ์
ํ์ง๋ง HOC์ ์ฌ์ฉํ์ ๋, Wrapper hell์ด๋ผ๋ ๋ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ๋ฐ์ ํ๋ค. "Wrapper hell" ์ ์ค์ฒฉ๋๋ Component๊ฐ ๋ง์์ ธ depth๊ฐ ๊น์ด์ง๊ฒ ๋์ด ์ฝ๋ ์ถ์ ์ ์ด๋ ต๊ฒ ๋ง๋ค๊ณ ์ปดํฌ๋ํธ์ ์ฌ๊ตฌ์ฑ์ ๊ฐ์ํ๊ฒ ํ๋ค.
HOC ๊ณ ์ฐจ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ์ฝ๋
SomeComponent๊ฐ ๋ง์ฐ์ค ํฌ์ง์ , window ํฌ๊ธฐ, ์ ์ ์์น ๋ฑ์ ์ ๋ณด๊ฐ ํ์ํ๋ค๋ฉด ์๋์ ๊ฐ์ด HOC๊ตฌ์กฐ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ฐ ๊ตฌ์กฐ๋ ๊ฐ๋ ์ฑ๋ ์ข์ง์๊ณ element๋ฅผ ์ฐพ๊ธฐ ํ๋ค์ด์ง๋ค.
Custom Hook์ ์ฌ์ฉํ ์ฝ๋
Custom Hook์ ํตํด ๋ชจ๋ํํ์ฌ SomeComponent ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ ๊ณ์ธต๊ตฌ์กฐ๊ฐ ๋จ์ํด์ง๋ฉฐ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํด์ง๋ค.
โ Hook์ ๊ณ์ธต์ ๋ณํ ์์ด ์ํ ๊ด๋ จ ๋ก์ง์ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค๋ค.
๐จ Huge Components (์ดํดํ๊ธฐ ์ด๋ ค์ด ๋ณต์กํ ์ปดํฌ๋ํธ)
๐ค ๋ง์ฝ ํ ์ปดํฌ๋ํธ๋ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋์ ๋ ๊ทธ๋ฆฌ๊ณ PathName Prop์ด ๋ณ๊ฒฝ๋์ ๋ lookups ๋ฐ์ดํฐ๋ฅผ API์์ ๋ฐ์์์ผ ํ๋ค๊ณ ํ์ ๋?
Classํ ์ปดํฌ๋ํธ์ LifeCycle ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ฝ๋
componentDidMount, componentDidUpdate์ LifeCycle API๋ฅผ ์ด์ฉํ์ฌ ์์ ์ ์ฒ๋ฆฌ ํ๊ฒ ๋์ด ํจ์๋ ๋จ์ผ ์ฑ ์ ์์น์ ๋ฒ์ด๋๊ฒ ๋๊ณ , ์ฝ๋๋ ๋ณต์กํด์ง๋ฉฐ, ํ ์คํธ๋ ์ ์ฐจ ์ด๋ ค์์ง๋ค.
ํจ์ํ ์ปดํฌ๋ํธ์ LifeCycle ๊ด๋ฆฌํ๋ Hook์ ์ฌ์ฉํ ์ฝ๋
useState, useEffect์ Hook์ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ ๊ฐ๊ฒฐํด์ง๊ณ ๋ฐ๋ณต์ ์ด๊ณ ๋ถํ์ํ ์ฝ๋๋ค์ด ์ ๊ฑฐ๋๋ค.
โ Hook์ ํตํด ์๋ก ๋น์ทํ ๊ฒ์ ํ๋ ์์ ํจ์์ ๋ฌถ์์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋๋๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉ ํ ์ ์๋ค.
๐จ Confusing Classes (์ฌ๋๊ณผ ๊ธฐ๊ณ๋ฅผ ํผ๋์ํค๋ Class)
React์์์ ClassComponent๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ JavaScript์ this
ํค์๋๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์์์ผ ํ๋ค. JavaScript์ this
ํค์๋๋ ๋๋ถ๋ถ์ ๋ค๋ฅธ ์ธ์ด์์์๋ ๋ค๋ฅด๊ฒ ์๋ํจ์ผ๋ก ํผ๋์ ์ ๋ฐํ๊ณ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ๊ตฌ์ฑ์ ์ด๋ ต๊ฒ ๋ง๋ ๋ค.
โ Hook์ Class์์ด React๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ค.
โ๐ป React Hook ์ ๋ฆฌ
React hook 16.8 ๋ฒ์ ์ดํ ๋์ ๋ ๊ธฐ๋ฅ์ด๋ค.
๊ธฐ์กด์ React๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฌธ์ ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด hook์ด ํ์ํ์๋ค.โ ํจ์ํ ์ปดํฌ๋ํธ์ Update
Class ์ปดํฌ๋ํธ์ ๋ฌธ์ โ this ํค์๋, extends ํค์๋๋ฅผ ํตํ ์์์ผ๋ก ๋ฐ๋ณต์ ์ธ ์ฝ๋ ์์ฑ
์ํ ๊ด๋ฆฌ ๋ก์ง(์ปดํฌ๋ํธ)์ ์ฌ์ฌ์ฉ ์ด๋ ค์ โ Custom hook ์ปดํฌ๋ํธ์ ๋ชจ๋ํ
Class ์ปดํฌ๋ํธ์ LifeCycle(์๋ช ์ฃผ๊ธฐ)์ ๊ด๋ จ๋ ๋ฉ์๋๋ก ์ธํ ๋ณต์กํ ์ปดํฌ๋ํธ
Hook์ ํตํด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋ ์ฑ ์๊ฒ ํ๋ฉฐ, ์ฌ์ฌ์ฉ์ ํจ์จ์ ๊ทน๋ํ ์ํค๊ธฐ ์ํ ๊ธฐ๋ฅ์ ์ ๊ณต
๐ ์ฐธ๊ณ
Last updated