[React] Hook

Hook

ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ(state)๋‚˜ ์ƒ๋ช…์ฃผ๊ธฐ(lifecycle) ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋‹ค.

 

Hook์ด ์ถ”๊ฐ€๋œ ์ด์œ 

์ปดํฌ๋„ŒํŠธ ์‚ฌ์ด์—์„œ ์ƒํƒœ ๋กœ์ง์„ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

๐Ÿ‘‰ ์ƒํƒœ ๋กœ์ง์„ “๊ธฐ๋Šฅ ๋‹จ์œ„”๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ๊ฐ€ ํž˜๋“ค์—ˆ๋‹ค.

๋ณต์žกํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

๐Ÿ‘‰ ์ƒํƒœ ๋กœ์ง๊ณผ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋ณ„๋กœ ํฉ์–ด์ ธ ์„œ๋กœ ๊ด€๋ จ ์—†๋Š” ์ฝ”๋“œ๋“ค์ด ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ์— ์„ž์ด๊ธฐ ์‰ฌ์› ๋‹ค.

์‚ฌ๋žŒ๊ณผ ๊ธฐ๊ณ„๋ฅผ ํ˜ผ๋™์‹œํ‚จ๋‹ค.

๐Ÿ‘‰ JavaScript์˜ this ๋™์ž‘ ๋ฐฉ์‹๊ณผ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋ฐ”์ธ๋”ฉ์œผ๋กœ ์ธํ•ด ์ดํ•ด๊ฐ€ ์–ด๋ ค์› ๋‹ค.

 


 

1. ์ƒํƒœ(State) ๊ด€๋ฆฌ ํ›…: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฐ’์„ ๋‹ค๋ฃจ๋Š” ํ›…

useState

์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ธฐ์–ตํ•ด์•ผ ํ•˜๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๊ณ , ๊ทธ ๊ฐ’์„ ๋ฐ”๊พธ๋ฉด ๋ฆฌ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

2. ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ(Effect) ํ›…: ๋ Œ๋”๋ง ‘์™ธ๋ถ€’ ์ž‘์—…์„ ๋‹ค๋ฃจ๋Š” ํ›…

useEffect

์˜์กด์„ฑ โŒ : ๋ Œ๋”๋ง ๋  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰

๋น„์–ด์žˆ๋Š” ์˜์กด์„ฑ ๋ฐฐ์—ด: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋  ๋•Œ ํ•œ ๋ฒˆ ์‹คํ–‰(StrictMode์—์„  2๋ฒˆ์ฒ˜๋Ÿผ)

๊ฐ’์ด ์žˆ๋Š” ์˜์กด์„ฑ ๋ฐฐ์—ด: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋  ๋•Œ ์‹คํ–‰๋˜๊ณ  ์˜์กด์„ฑ ๋ฐฐ์—ด์˜ ์ƒํƒœ๊ฐ’ ๋”ฐ๋ผ ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค.

 

useLayoutEffect 

DOM ๋ฐ˜์˜ ์งํ›„, ํ™”๋ฉด ๊ทธ๋ฆฌ๊ธฐ ์ „์— ์‹คํ–‰ํ•œ๋‹ค.

 

3. ๋ฉ”๋ชจ์ด์ œ์ด์…˜(์ตœ์ ํ™”) ํ›…: ๋ถˆํ•„์š”ํ•œ ์žฌ๊ณ„์‚ฐ, ์žฌ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•˜๋Š” ํ›…

* ๋ฉ”๋ชจ์ด์ œ์ด์…˜

ํ•จ์ˆ˜ ํ˜ธ์ถœ์˜ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•˜๊ณ  ๋™์ผํ•œ ์ž…๋ ฅ์ด ๋‹ค์‹œ ๋ฐœ์ƒํ•  ๋•Œ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ๋Œ€์‹ 

์บ์‹ฑ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ 

 

useMemo

๊ฐ’์„ ์บ์‹ฑํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ์žฌ๊ณ„์‚ฐ์„ ๋ง‰๋Š”๋‹ค.

 

useCallback

ํ•จ์ˆ˜๋ฅผ ์บ์‹œํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ํ•จ์ˆ˜ ์žฌ์ƒ์„ฑ์„ ๋ง‰๋Š”๋‹ค.

์ผ๋ฐ˜ ํ•จ์ˆ˜๋Š” ๋ Œ๋”๋ง๋  ๋•Œ ๊ธฐ์กด ํ•จ์ˆ˜๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜๋˜๊ณ  ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๋‹จ์ˆœํ•œ ์ž‘์—…์„ ํ•œ๋‹ค.
๋ฐ˜๋ฉด, useCallback์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜์กด์„ฑ ํ™•์ธ์„ ์œ„ํ•ด ์ข…์†๋œ ๊ฐ’๋“ค์˜ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฉฐ,
๋งค ๋ Œ๋”๋ง ์‹œ๋งˆ๋‹ค ํ•ด๋‹น ๊ฐ’๋“ค์„ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค. 
ํ•จ์ˆ˜ ์ •์˜๋ฅผ ์œ„ํ•ด์„œ ๋ฐฐ์—ด์„ ํ• ๋‹นํ•ด์•ผ ํ•˜๊ณ  ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•œ๋‹ค.

 

๋ฉ”๋ชจ์ด์ œ์ด์…˜์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
1. ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ๊ณ„์‚ฐ
- ์ƒ๋‹นํ•œ ์‹œ๊ฐ„์ด๋‚˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ์†Œ์š”๋˜๋Š” ํ•จ์ˆ˜๋‚˜ ๊ณ„์‚ฐ์ด ์žˆ๋Š” ๊ฒฝ์šฐ
-  ์—ฐ์‚ฐ ํ˜น์€ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ๋งค์šฐ ๋งŽ์•„์„œ ๋ Œ๋”๋ง์˜ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ

2. ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— ํ•จ์ˆ˜๋ฅผ props๋กœ ๋„˜๊ธธ ๋•Œ
- ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ๋™์ผํ•œ props๋ฅผ ๋ฐ›๊ณ  ๋™์ผํ•œ ์ž…๋ ฅ์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฝ์šฐ
โžก๏ธ props๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์„ ๋•Œ ์žฌ๋ Œ๋”๋ง๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€
- ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌ๋˜๊ฑฐ๋‚˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๊ธฐ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
โžก๏ธ ์ฝœ๋ฐฑ์— ์˜์กดํ•˜๋Š” ์ž์‹ ์ปดํฌ๋„ŒํŠธ์˜ ๋ถˆํ•„์š”ํ•œ ์žฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๋ฉด์„œ ๋ Œ๋”๋ง ๊ฐ„์— ๋™์ผํ•œ ํ•จ์ˆ˜ ์ฐธ์กฐ๊ฐ€ ์‚ฌ์šฉ

3. ๋‹ค๋ฅธ ํ›…์˜ ์˜์กด์„ฑ์— ์‚ฌ์šฉ๋  ๋•Œ
- useEffect์˜ ์˜์กด์„ฑ ๋ชฉ๋ก์— ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ๊ณ„์‚ฐ์ด๋‚˜ ๋ Œ๋”๋ง ๊ฐ„์— ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฐœ์ฒด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
- ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๋“ฑ์„ ์˜์กด์„ฑ์— ํฌํ•จํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

 

๋ฉ”๋ชจ์ด์ œ์ด์…˜์ด ํ•„์š” ์—†๋Š” ๊ฒฝ์šฐ
1. ์ž‘์€ ์ปดํฌ๋„ŒํŠธ
-  ๋น ๋ฅด๊ฒŒ ๋ Œ๋”๋ง๋˜๋Š” ์ž‘๊ณ  ๊ฐ„๋‹จํ•œ ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฝ์šฐ

2. ๊ธฐ๋ณธ์ ์ด๊ฑฐ๋‚˜ ๋น ๋ฅธ ์ž‘์—…
- ๊ธฐ๋ณธ ์‚ฐ์ˆ , ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ ๋˜๋Š” ๋ฐฐ์—ด ์กฐ์ž‘๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์ž‘์—…

3. (React.memo์˜ ๊ฒฝ์šฐ) ์ž์ฃผ ๋‹ค์‹œ ๋ Œ๋”๋ง๋˜๋Š” ์ปดํฌ๋„ŒํŠธ
- ์ปดํฌ๋„ŒํŠธ์˜ props๊ฐ€ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ

 

4. ์ฐธ์กฐ(Ref) ํ›…: ๋ Œ๋”๋ง๊ณผ ๋ฌด๊ด€ํ•œ ๊ฐ’ ๋˜๋Š” DOM ์ ‘๊ทผํ•˜๋Š” ํ›…

useRef

 

5. Context ๊ด€๋ จ ํ›…: ์ „์—ญ์ฒ˜๋Ÿผ ๊ณต์œ ๋˜๋Š” ๊ฐ’ ์ ‘๊ทผํ•˜๋Š” ํ›…

useContext

 

์ฐธ๊ณ  ์ž๋ฃŒ

- https://d2.naver.com/helloworld/9223303