4. useRef & Custom Hook
useRef
๋ ๋๋ง์ด ๋ถํ์ํ ๊ฐ์ ์ฐธ์กฐํ๊ฒ ํด์ฃผ๋ ํ
initial value
๋ก ์ด๊ธฐํ๋current
์์ฑ์ ๊ฐ์ง๊ณ ์๋ref
๊ฐ์ฒด๋ฅผ ๋ฆฌํด๋ค์ ๋ ๋๋ง์์๋
useRef
๋ ๋์ผํ ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์current
์์ฑ์ ์ ์ฅํ ๊ฐ์ ๋์ค์ ์ฝ์ด๋ค์ผ ์ ์์ref
์ ๋ณํ๋ ๋ฆฌ๋ ๋๋ง์ triggerํ์ง ์๋๋ค๋ ์ ์์state
์ ์ฐจ์ด๊ฐ ์์
ref
์ ๋ค๋ฅธ ๋ณ์๋ค์ ์ฐจ์ด
์ผ๋ฐ ๋ณ์์ ๋ฌ๋ฆฌ ๋งค ๋ ๋๋ง๋ง๋ค ๋ฆฌ์ ๋์ง ์๊ณ ๊ฐ์ด ์ ์ฅ๋จ
state์ ๋ฌ๋ฆฌ ๋ฆฌ๋ ๋๋ง๋์ง ์์
์ธ๋ถ ๋ณ์์ ๋ฌ๋ฆฌ ์ปดํฌ๋ํธ ๊ฐ์ ๊ณต์ ๋์ง ์์
ref๋ก DOM ์กฐ์ํ๊ธฐ
null๊ฐ์ ์ด๊ธฐ๊ฐ์ผ๋ก ๊ฐ๋ ref ๊ฐ์ฒด ์์ฑ
ref ๊ฐ์ฒด๋ฅผ ref attribute๋ก ๋๊น
DOM๋ ธ๋๊ฐ ์คํฌ๋ฆฐ์ ์์ฑ๋๊ณ ๋๋ฉด current ์์ฑ์ DOM ๋ ธ๋๊ฐ ์ ์ฅ๋จ
ref์ current๊ฐ์ผ๋ก DOM ๋ ธ๋๋ฅผ ์กฐ์ํ ์ ์์
๋ ธ๋๊ฐ ์คํฌ๋ฆฐ์์ ์ฌ๋ผ์ง๋ฉด current๊ฐ์ null์ด ๋จ
๋ ๋๋ง ์ค์ ref ๊ฐ์ read/write ํ์ง ์๊ธฐ
๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ ํญ์ ์์ํจ์์ฌ์ผํจ
์ธํ์ด ๋์ผํ๋ค๋ฉด ํญ์ ๋์ผํ ๊ฒฐ๊ณผ(JSX)๋ฅผ ๋ฆฌํดํด์ผํจ
๋ค๋ฅธ ์์๋ ๋ค๋ฅธ ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ํธ์ถํด๋ ๋ค๋ฅธ ํธ์ถ์ ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น์ง ์์์ผ ํจ
๋ ๋๋ง ์ค์ ๊ฐ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ฌ์ฉํด์ผํ๋ค๋ฉด state๋ฅผ ์ธ ๊ฒ
ref contents์ ์ฌ์์ฑ ํผํ๊ธฐ
๋ณดํต ref์ ์ด๊ธฐ๊ฐ์ ์ฌ๋ ๋๋ง์ ๋ฌด์๋จ
๊ทธ๋ฌ๋ ์๋ ์ฝ๋๋ ๋งค๋ฒ new VideoPlayer()
๋ฅผ ์์ฑํ๊ฒ ๋จ
๋ถํ์ํ ๊ฐ์ฒด๋ฅผ ๋งค๋ฒ ์์ฑํ๋ ๊ฒ์ ๋ญ๋น์ด๋ฏ๋ก ์๋์ ๊ฐ์ด ์์ฑ
์ผ๋ฐ์ ์ผ๋ก ref ๊ฐ์ ๋ ๋๋งํ๋ ๋์ ์ฐ์ง ์๋ ๊ฒ์ด ์ข์ง๋ง ์ฌ๊ธฐ์๋ ์คํ๊ณผ๊ฐ ํญ์ ๋์ผํ ๊ฐ์ ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์ OK
Custom Hook
๋๋ง์ ํ ์ ๋ง๋ค์ด ์ปดํฌ๋ํธ ๊ฐ์ ๋ก์ง์ ์ฌ์ฌ์ฉํ ์ ์์
์ํ ๊ด๋ จ ๋ก์ง์ ์ปดํฌ๋ํธ์์ ๊ณต์ ํ๋ ๋๊ฐ์ง ์ ํต์ ์ธ ๋ฐฉ๋ฒ : render props, ๊ณ ์ฐจ์ปดํฌ๋ํธ
-> ์ปค์คํ ํ ์ ํตํด ๋๊ฐ์ง ๋ฐฉ๋ฒ์ ๋์ ํ ์ ์์
์ปค์คํ ํ ๋ง๋๋ ๋ฒ
์ด๋ฆ์ด use๋ก ์์ํ๋ ๋๋ค๋ฅธ ํจ์๋ก ๋ถ๋ฆฌ
use๋ก ์์ํด์ผ Hook์ ๊ท์น์ ์งํค๊ณ ์๋์ง ํ์ธ ํ ์ ์์
์ปค์คํ ํ ์ ๋ฆฌ์กํธ์ ํน๋ณํ ๊ธฐ๋ฅ์ด๋ผ๊ธฐ๋ณด๋ค hook์ ๋์์ธ์ ๋ฐ๋ฅด๋ ๊ด์ต
์ฌ๋ฌ ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ Hook์ ์ฌ์ฉํด๋ state๋ effect๋ฅผ ๊ณต์ ํ์ง๋ ์์(๋ ๋ฆฝ์ )
๊ฐ๊ฐ์ Hook์ ๋ํ ํธ์ถ์ ์๋ก ๋ ๋ฆฝ์ ์ผ๋ก
useState
๋useEffect
๋ฅผ ํธ์ถํ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง
Hook์ ๊ท์น
์๋์ ๊ท์น์ ์ง์ผ์ผ ์ปดํฌ๋ํธ์ ๋ชจ๋ ์ํ ๊ด๋ จ ๋ก์ง์ ์์ค์ฝ๋์์ ๋ช ํํ๊ฒ ๋ณด์ด๋๋ก ํ ์ ์์
์ต์์์์๋ง Hook์ ํธ์ถํด์ผํจ
์ค์ง React ํจ์๋ด์์๋ง ํธ์ถํด์ผํจ
๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ, ์ค์ฒฉ๋ ํจ์์์์ Hook์ ํธ์ถํ๋ฉด ์๋จ
์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ๋๋ง๋ค ํญ์ ๋์ผํ ์์๋ก Hook์ด ํธ์ถ๋๋ ๊ฒ์ ๋ณด์ฅํ๊ธฐ ์ํจ
React ํจ์ ์ปดํฌ๋ํธ๋ Custom Hook์์์๋ง Hook์ ํธ์ถํด์ผํจ
Hook์ด ์ต์์์์ ํธ์ถ๋์ด์ผ ํ๋ ์ด์
ํ ์ปดํฌ๋ํธ ์์์ ์ฌ๋ฌ ๋ฒ์ useState
์ useEffect
๊ฐ ํธ์ถ๋ ์ ์์
๋ฆฌ์กํธ๋ ์ด๋ค state๊ฐ ์ด๋ค useState
์ ๋์ํ๋์ง ์ด๋ป๊ฒ ์ ์ ์์๊น?
ํ ์ด ํธ์ถ๋ ์์์ ๋ฐ๋ฆ
๋ชจ๋ ๋ ๋๋ง์์ Hook์ ํธ์ถ ์์๊ฐ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ ์ ์์
๊ทธ๋ฌ๋ ์กฐ๊ฑด๋ฌธ ์์์ ํ ์ ํธ์ถํ๋ฉด ๋ค์ ๋ ๋๋ง์ ํ ์ ํธ์ถ์์๊ฐ ๋ณ๊ฒฝ๋ ์ ์์
๋ฆฌ์กํธ๋ ์ด์ ๋ ๋๋ง๊ณผ ๋์ผํ ์์๋ก ํ ์ด ์คํ๋ ๊ฑฐ๋ผ๊ณ ์์ํ๊ธฐ ๋๋ฌธ์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ์ ์์
์กฐ๊ฑด๋ถ๋ก effect๋ฅผ ์คํํ๊ธฐ๋ฅผ ์ํ๋ค๋ฉด ์กฐ๊ฑด๋ฌธ์ Hook ๋ด๋ถ์ ๋ฃ์ด์ผ ํจ
Last updated