React

[React] React Hooks

jjingle 2023. 9. 15. 11:38

 

useState

: React์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” Hook์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฆฌ๋ Œ๋”(re-render) ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

setState๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ state์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด, ๋ณ€๊ฒฝ๋œ ๊ฐ’์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋œ๋‹ค.

 

- setState๋Š” ๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. -> ์—ฐ์†์œผ๋กœ ์—ฌ๋Ÿฌ๋ฒˆ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ, ์—…๋ฐ์ดํŠธ๋œ state๋ฅผ ๋ณด์žฅ๋ฐ›์ง€ ๋ชปํ•œ๋‹ค.

- state๊ฐ€ ๋ณ€ํ•  ๊ฒฝ์šฐ, ์ปดํฌ๋„ŒํŠธ ์ „์ฒด๊ฐ€ ๋ฆฌ๋ Œ๋”๋œ๋‹ค. -> ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— ์ •์˜๋œ ๋ชจ๋“  ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๊ฐ€ ์žฌ์„ ์–ธ, ์žฌ์‹คํ–‰๋œ๋‹ค. -> ์„ฑ๋Šฅ์ €ํ•˜ ์ด์Šˆ

 

useEffect

: ํ•จ์ˆ˜์™€ ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•„, ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์‹œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.

๋ณ€์ˆ˜๋Š” ์˜์กด์„ฑ ๋ฐฐ์—ด(dependency array)๋กœ ์—ฌ๋Ÿฌ ๊ฐ’์„ ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์˜์กด์„ฑ ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ์„ ๊ฒฝ์šฐ, ์ตœ์ดˆ ๋ Œ๋”๋ง ์‹œ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋œ๋‹ค.

 

-  useEffect์—์„œ setInterval ์‚ฌ์šฉ ์‹œ, ๋‚ด๋ถ€ ํ•จ์ˆ˜๊ฐ€ clearInterval๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

- ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง์„ ์œ„ํ•ด ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์–ธ๋งˆ์šดํŠธํ•˜๋Š” ์‹œ์ ์— return ๋œ๋‹ค.

 

useLayoutEffect

: useEffect์™€ ๊ฑฐ์˜ ๋น„์Šทํ•˜๋‚˜, ์˜์กด์„ฑ ๋ฐฐ์—ด ์•ˆ์˜ state๊ฐ€ ๋ Œ๋”๋ง ๋˜๊ธฐ ์ „ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

DOM ์š”์†Œ์˜ ๋ ˆ์ด์•„์›ƒ(์œ„์น˜, ๋„ˆ๋น„ ๋“ฑ)์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœํ•˜๋Š” ์ž‘์—…์„ ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

 

 

useContext

: ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ „์—ญ state๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ์—์„œ props๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์—, props drilling์„ ํ•ด๊ฒฐํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

 

useReducer

: useState๋ณด๋‹ค ๋ณต์žกํ•œ state๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

state ์—…๋ฐ์ดํŠธ ๋กœ์ง์„ ํšจ๊ณผ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ์—ฌ๋Ÿฌ ์•ก์…˜์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๋‹ค์–‘ํ•œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋™์ผํ•œ state์— ์ ‘๊ทผํ•˜์—ฌ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

 

const [state, dispatch] = useReducer(reducer, initialState);

- reducer์™€ initialState๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„, state์™€ ํ•จ๊ป˜ dispatch๋Š” ์•ก์…˜ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

     - reducer :  ํ˜ธ์ถœ๋  ๋•Œ, ํ˜„์žฌ ์ƒํƒœ์™€ ์•ก์…˜ ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„ ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜

     - initialState : ์ดˆ๊ธฐ ์ƒํƒœ ๊ฐ’

 

 

useRef

: ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์œ ์ง€ํ•˜๋Š” ๊ฒฝ์œ ์— ์‚ฌ์šฉํ•œ๋‹ค.

์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง ์‚ฌ์ด์—์„œ๋„ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ’์˜ ๋ณ€๊ฒฝ์ด ๋ฆฌ๋ Œ๋”๋ง์„ ์ผ์œผํ‚ค์ง€ ์•Š๋Š”๋‹ค.

 

- ref์€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋กœ, .current  ์†์„ฑ์„ ํ†ตํ•ด ์ฐธ์กฐ๊ฐ’์— ์ ‘๊ทผํ•˜๋ฉฐ ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.- testRef.current.focus(); <- DOM ์š”์†Œ์— ์ง์ ‘ ์ ‘๊ทผ

 

useMemo

: ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ์ €์žฅ(๋ฉ”๋ชจ์ด์ œ์ด์…˜ / ์บ์‹ฑ)ํ•˜๊ณ , ์˜์กด์„ฑ ๋ฐฐ์—ด์— ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์‹œ ๊ณ„์‚ฐ์„ ๋‹ค์‹œ ์ˆ˜์ •ํ•œ๋‹ค.

์ปดํฌ๋„ŒํŠธ ๋ฆฌ๋ Œ๋”๋ง ์‹œ, ์˜์กด์„ฑ ๋ฐฐ์—ด ์•ˆ์˜ ๊ฐ’์ด ๊ฐ™์„ ๊ฒฝ์šฐ, ์ €์žฅ๋œ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ด -> ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ X /  ๋ Œ๋”๋ง ์„ฑ๋Šฅ ํ–ฅ์ƒ

 

useCallback

: ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜์—ฌ, ์˜์กด์„ฑ ๋ฐฐ์—ด์— ๋ช…์‹œ๋œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜ ์ƒ์„ฑํ•œ๋‹ค. -> ์„ฑ๋Šฅ ์ตœ์ ํ™”

 

useTransition

: ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

state์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ํŠน์ • ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ํ™”๋ฉด์— ๋ Œ๋”๋ง ->๋ธŒ๋ผ์šฐ์ €์˜ ํ™”๋ฉด ์—…๋ฐ์ดํŠธ ์†๋„ ํ–ฅ์ƒ

 

- ๋‘ ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉ

   - ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์‹คํ–‰์ƒํƒœ(๋กœ๋”ฉ)๋ฅผ ํ‘œ์‹œํ•  ๋•Œ, ํ™”๋ฉด์— ๋ณด์—ฌ์ค„ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ

   - ํ•ด๋‹น ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•  ๋•Œ์˜ ๋ Œ๋”๋ง ์šฐ์„ ์ˆœ์œ„

 

- setState๋กœ state๋ฅผ ์ „์ฒด์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ๋•Œ, useTransition์˜ timeoutMs ์˜ต์…˜ ๊ฐ’์„ ์ ์šฉํ•จ์—๋”ฐ๋ผ ๋ถ€๋ถ„์ ์ธ ์—…๋ฐ์ดํŠธ๋ฅผ ๋จผ์ € ์ˆ˜ํ–‰ํ•˜๊ณ ,

ํ•ด๋‹น ๋ฐ€๋ฆฌ์ดˆ๊ฐ€ ์ง€๋‚œ ํ›„ ๋‚˜๋จธ์ง€ ์—…๋ฐ์ดํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. -> ๋ณต์žกํ•œ ๊ณ„์‚ฐ ํฌํ•จ๋œ ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์†๋„ ํ–ฅ์ƒ