4. useRef & Custom Hook
1. useRef
๊ณต์ ๋ฌธ์์ useRef beta ๋ฌธ์์ useRef
์ปดํฌ๋ํธ์ ์์ ์ฃผ๊ธฐ ์ ์ฒด์ ๊ฑธ์ณ์ ์ ์ง๋๋ ๊ฐ์ฒด(์ปดํฌ๋ํธ๊ฐ ์์ด์ง ๋๊น์ง ๋์ผํ ๊ฐ์ฒด๊ฐ ์ ์ง)
๊ฐ์ฒด ์์ฒด๊ฐ ๊ฐ์ ์๋๊ณ , ๊ฐ์ ์ฐธ์กฐ(reference)ํ๊ธฐ ์ํ ๊ฐ์ฒด ์ธ์ ๋ ์ง ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์
state์ ์๊ด ์์ด ์ด๋ค ๊ฐ์ ์ ์ง
๐ฐ ์ปดํฌ๋ํธ์ ์์ ์ฃผ๊ธฐ
์ปดํฌ๋ํธ๊ฐ ์์ฑ๋๊ณ , ์์ด์ง ๋(VDOM์ผ๋ก ๋ค์ด๊ฐ ์์๊ฐ ์ฌ๋ผ์ง ๋) ๊น์ง
์ฌ์ฉ ๋ฐฉ๋ฒ
useRef๋ .current
ํ๋กํผํฐ๋ก ์ ๋ฌ๋ ์ธ์(initialValue)๋ก ์ด๊ธฐํ๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ref ๊ฐ์ฒด๋ฅผ ๋ฐํ
๋ฐํ๋ ๊ฐ์ฒด๋ ์ปดํฌ๋ํธ์ ์ ์์ ์ฃผ๊ธฐ๋ฅผ ํตํด ์ ์ง
๐ฆ ๋ณธ์ง์ ์ผ๋ก useRef๋ .current
ํ๋กํผํฐ์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ์ ๋ด๊ณ ์๋ ์์
์ฃผ์์
useRef๋ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋ ๋ ๊ทธ๊ฒ์ ์๋ ค์ฃผ์ง๋ ์์ ๐ก ์ํ(state)๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํด๋น ์ปดํฌ๋ํธ์ ํ์ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋งํ์ง๋ง, ๋ ํผ๋ฐ์ค ๊ฐ์ฒด์ ํ์ฌ ๊ฐ(current)์ด ๋ฐ๋๋๋ผ๋ ๋ ๋๋ง์ ์ํฅ์ ์ฃผ์ง ์์
.current ํ๋กํผํฐ๋ฅผ ๋ณํํ๋ ๊ฒ์ด ๋ฆฌ๋ ๋๋ง์ ๋ฐ์์ํค์ง๋ ์์
React๊ฐ DOM ๋ ธ๋์ ref๋ฅผ attachํ๊ฑฐ๋ detachํ ๋ ์ด๋ค ์ฝ๋๋ฅผ ์คํํ๊ณ ์ถ๋ค๋ฉด ๋์ ์ฝ๋ฐฑ ref๋ฅผ ์ฌ์ฉํ ๊ฒ
ref์ useRef
๐ณ ref
DOM์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ
<div ref={myRef} />
๋ฅผ ์ฌ์ฉํ์ฌ React๋ก ref ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ฉด, React๋ ๋ ธ๋๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋ณ๊ฒฝ๋ DOM ๋ ธ๋์ ๊ทธ๊ฒ์ .current ํ๋กํผํฐ๋ฅผ ์ค์
๐ ref์ useRef
ref ์์ฑ๋ณด๋ค useRef()๊ฐ ๋ ์ ์ฉ useRef Hook์ DOM ref๋ง์ ์ํ ๊ฒ์ด ์๋ ์ด ๊ธฐ๋ฅ์ ํด๋์ค์์ ์ธ์คํด์ค ํ๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ์ ์ฌํ ์ด๋ค ๊ฐ๋ณ๊ฐ์ ์ ์งํ๋ ๋ฐ์ ํธ๋ฆฌ
ref
๊ฐ์ฒด๋ ํ์ฌ ํ๋กํผํฐ๊ฐ ๋ณ๊ฒฝํ ์ ์๊ณ ์ด๋ค ๊ฐ์ด๋ ๋ณด์ ํ ์ ์๋ ์ผ๋ฐ ์ปจํ ์ด๋ ์ด๋ class์ ์ธ์คํด์ค ํ๋กํผํฐ์ ์ ์ฌ
โ useRef()๊ฐ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ useRef()์ {current: ...} ๊ฐ์ฒด ์์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ ์ผํ ์ฐจ์ด์ ์, useRef๋ ๋งค๋ฒ ๋ ๋๋ง์ ํ ๋ ๋์ผํ ref ๊ฐ์ฒด๋ฅผ ์ ๊ณต
์ฉ๋
์ปดํฌ๋ํธ๊ฐ ์ฌ๋ผ์ง ๋๊น์ง ๋์ผํ ๊ฐ์ ์จ์ผ ํ๋ ๊ฒฝ์ฐ โ input ๋ฑ์ ID ๊ด๋ฆฌ
(ํนํ useEffect ๋ฑ๊ณผ ํจ๊ป ์ฐ๋ฉด์ ๋ง๋๊ฒ ๋๋) ๋น๋๊ธฐ ์ํฉ์์ ํ์ฌ ๊ฐ์ ์ ๋๋ก ์ฐ๊ณ ์ถ์ ๊ฒฝ์ฐ
โ๏ธ Closure โ ๋ณ์๋ฅผ capture, bind๋ฅผ ๊น๋นกํ๋ ๋ฌธ์ ๊ฐ ์ข ์ข ๋ฐ์
์์
์ ๋๋ก ์ธ ์ผ์ด ์๋ ์ต์ง๋ก ๊พธ๋ฉฐ๋ธ ์ํฉ
ํ์ฌ๊ฐ์ด ๋์ค์ง ์์ โ ์์ํ ๋์ ๊ฐ์ด ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ
ํ์ฌ๊ฐ์ด ์ ๋๋ก ์ถ๋ ฅ๋จ
ํด๋ก์ (closure)
๋ณ์์ ์ ํจ๋ฒ์์ ํด๋ก์
์ด๋ค ํจ์์์ ์ ์ธํ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ ๊ทธ ํจ์์ ๋ด๋ถํจ์์์๋ง ๋ฐ์ํ๋ ํ์ ์ธ๋ถ ํจ์์ LexicalEnvironment๊ฐ ๊ฐ๋น์ง ์ปฌ๋ ํ ๋์ง ์๋ ํ์
ํด๋ก์ ๋ ์ธ๋ถ ๋ณ์๋ฅผ ๊ธฐ์ตํ๊ณ ์ด ์ธ๋ถ ๋ณ์์ ์ ๊ทผํ ์ ์๋ ํจ์ ๋ช๋ช ์ธ์ด์์ ํด๋ก์ ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๊ฑฐ๋ ํน์ํ ๋ฐฉ์์ผ๋ก ํจ์๋ฅผ ์์ฑํด์ผ ํด๋ก์ ๋ฅผ ๋ง๋ค ์ ์์ง๋ง, ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ชจ๋ ํจ์๊ฐ ํด๋ก์ (์์ธ ์กด์ฌ)
์๋ฐ์คํฌ๋ฆฝํธ์ ํจ์๋ ์จ๊น ํ๋กํผํฐ์ธ [[Environment]]๋ฅผ ์ด์ฉํด ์์ ์ด ์ด๋์ ๋ง๋ค์ด์ก๋์ง๋ฅผ ๊ธฐ์ต ํจ์ ๋ณธ๋ฌธ์์ [[Environment]]๋ฅผ ์ฌ์ฉํด ์ธ๋ถ ๋ณ์์ ์ ๊ทผ
๊ฐ๋น์ง ์ปฌ๋ ์
ํจ์ ํธ์ถ์ด ์ข ๋ฃ๋๋ฉด ํด๋น ํจ์์ LexicalEnvironment๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ โ ํจ์์ ๊ด๋ จ๋ ๋ณ์๋ค์ ์ด๋ ๋ชจ๋ ์ฌ๋ผ์ง(๊ด๋ จ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ ์ด์ ) ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ชจ๋ ๊ฐ์ฒด๋ ๋๋ฌ ๊ฐ๋ฅํ ์ํ์ผ ๋๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ ์ง๋จ ์ฐธ์กฐ ์นด์ดํธ๊ฐ 0์ด ๋๋ฉด ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์์ง ๋์์ด ๋์ด ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ๋ผ์ง
ํธ์ถ์ด ๋๋ ํ์๋ ์ฌ์ ํ ๋๋ฌ ๊ฐ๋ฅํ ์ค์ฒฉ ํจ์๊ฐ ์กด์ฌํ ์ ์์ ์ด๋๋ ์ด ์ค์ฒฉํจ์์ [[Environment]] ํ๋กํผํฐ์ ์ธ๋ถ ํจ์ ๋ ์์ปฌ ํ๊ฒฝ์ ๋ํ ์ ๋ณด๊ฐ ์ ์ฅ(๋๋ฌ ๊ฐ๋ฅํ ์ํ) ํจ์ ํธ์ถ์ ๋๋ฌ์ง๋ง LexicalEnvironment๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ง๋๋ ์ด์
์์ธ
new Function ์ ์ด์ฉํด ํจ์๋ฅผ ๋ง๋ค๋ฉด ํจ์์ [[Environment]] ํ๋กํผํฐ๊ฐ ํ์ฌ LexicalEnvironment๊ฐ ์๋ ์ ์ญ LexicalEnvironment๋ฅผ ์ฐธ์กฐ โ new Function์ ์ด์ฉํด ๋ง๋ ํจ์๋ ์ธ๋ถ ๋ณ์์ ์ ๊ทผํ ์ ์๊ณ , ์ค์ง ์ ์ญ ๋ณ์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
2. Custom Hook
๋ก์ง์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํ ์ ์ผ ์ฌ์ด ๋ฐฉ๋ฒ Extract Function์ ์ํํ๋ฉด ๋จ(์ปดํฌ๋ํธ ๋ก์ง์ ํจ์๋ก ๋ฝ์๋ด์ด ์ฌ์ฌ์ฉ) ๊ธฐ๋ณธ์ ์ผ๋ก Hook์ ๋์์ธ์ ๋ฐ๋ฅด๋, ๊ธฐ์กด๊ณผ ๊ฐ์ ์ฝ๋
ํน์ง
1. ์ด๋ฆ์ด use๋ก ์์ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์
์ปดํฌ๋ํธ ์ด๋ฆ : ๋๋ฌธ์๋ก ์์ํ๋ PascalCase
Hook์ ์ด๋ฆ :
use
๋ก ์์ํ๋ camelCase
React ์ปดํฌ๋ํธ์๋ ๋ค๋ฅด๊ฒ Custom Hook์ ํน์ ํ ์๊ทธ๋์ฒ๊ฐ ํ์ํ์ง ์์ ์ผ๋ฐ ํจ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฌด์์ ์ธ์๋ก ๋ฐ์์ผ ํ๋ฉฐ, ๋ฌด์์ ๋ฐํํด์ผ ํ๋ ์ง๋ฅผ ์ฌ์ฉ์๊ฐ ๊ฒฐ์ ํ ์ ์์
2. Custom Hook์ ๋ค๋ฅธ Hook์ ํธ์ถ ๊ฐ๋ฅ
Hook์ ํจ์์ด๊ธฐ ๋๋ฌธ์ Hook ์ฌ์ด์์๋ ์ ๋ณด๋ฅผ ์ ๋ฌ ๊ฐ๋ฅ
3. Custom Hook์ ๋
๋ฆฝ๋ state๋ฅผ ์ป์
Custom Hook์ ์ํ ๊ด๋ จ ๋ก์ง(๊ตฌ๋ ์ ์ค์ ํ๊ณ ํ์ฌ ๋ณ์ซ๊ฐ์ ๊ธฐ์ตํ๋ ๊ฒ)์ ์ฌ์ฌ์ฉํ๋ ๋ฉ์ปค๋์ฆ ๊ฐ๊ฐ์ Custom Hook์ ๋ํ ํธ์ถ์ ์๋ก ๋ ๋ฆฝ๋ state๋ฅผ ๋ฐ์ ๊ทธ ์์ state์ effect๋ ์์ ํ ๋ ๋ฆฝ์ ํ๋์ ์ปดํฌ๋ํธ ์์์ useState์ useEffect๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ถ๋ฅผ ์ ์๊ณ ์ด๋ค์ ๋ชจ๋ ์์ ํ ๋ ๋ฆฝ์
Custom Hook ์์
์ฅ์
์ปดํฌ๋ํธ ์ฝ๋๊ฐ ๋ช ํํด์ง
์ฌ์ฌ์ฉ ํธ๋ฆฌ
์ผ์ข ์ ์บก์ํ โ setProducts๊ฐ ์ค์๋ก ์๋ชป ์ฐ์ผ ๋ฌธ์ ๋ฅผ ํด์
Hook์ ์ฌ์ฉํ์ฌ ํธ๋ฆฌ์ ์ปดํฌ๋ํธ๋ฅผ ๋ํ์ง ์์
state๋ฅผ ์ดํดํ๊ณ ๊ณ ๋ฏผํ์ง ์์๋ ์ธ ์ ์์(๊ทธ๋ฅ ๊บผ๋ด๋ค ์ฐ๋ฉด ๋จ)
3. Hook์ ๊ท์น
Hook ํธ์ถ์ ๊ท์น์ด ์์ด์ ๋จ์ํ๊ฒ ์ฐ๋๋ก ๋ ธ๋ ฅํด์ผ ํจ
Function Component ๋ฐ๋ก ์์ชฝ(ํจ์์ ์ต์์)์์๋ง ํธ์ถ
Function Component ๋๋ Custom Hook์์๋ง ํธ์ถ
โ ๏ธ ์ฒ์์๋ ์ฝ๋ฐฑ ํจ์๋ ์กฐ๊ฑด๋ฌธ ์์์ Hook์ ํธ์ถํ๋ ์ค์๋ฅผ ์ ์ง๋ฅด๊ธฐ ์ฌ์ฐ๋ ์ฃผ์ ๊ฐ๋ฅํ๋ฉด ๋ฐ๊นฅ์ผ๋ก ๋นผ๊ธฐ
์ค๋ฅ ๋ฐ์
์ ์ด์ custom hook์ ๋ง๋ค ๋ ์ ๊ฒฝ์จ์ผ ํจ
Last updated