๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ „์ฒด ๊ธ€92

useReducer useReducer ์ƒํƒœ ๊ด€๋ฆฌ hook์ค‘ ํ•˜๋‚˜(useState์ฒ˜๋Ÿผ) ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ๋กœ์ง์„ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ถ„๋ฆฌ ๊ฐ€๋Šฅ → ์ƒํƒœ ์—…๋ฐ์ดํŠธ ๋กœ์ง์„ ์ปดํฌ๋„ŒํŠธ ๋ฐ”๊นฅ์— ์ž‘์„ฑ ๊ฐ€๋Šฅ, ์‹ฌ์ง€์–ด ๋‹ค๋ฅธ ํŒŒ์ผ์— ์ž‘์„ฑ ํ›„ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ reducer: ํ˜„์žฌ ์ƒํƒœ์™€ ์•ก์…˜ ๊ฐ์ฒด๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„์™€์„œ ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜ function reducer(state, action) { // ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋งŒ๋“œ๋Š” ๋กœ์ง // const nextState = ... return nextState; } ๋ฐ˜ํ™˜ํ•˜๋Š” ์ƒํƒœ๋Š” ๊ณง ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ง€๋‹ ์ƒˆ๋กœ์šด ์ƒํƒœ๊ฐ€ ๋จ action์€ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ ์ •๋ณด๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ์Œ(๊ฐ์ฒด์˜ ํ˜•ํƒœ๋Š” ์ž์œ ) → type ๊ฐ’์„ ์ง€๋‹Œ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ //์นด์šดํ„ฐ์— 1์„ ๋”ํ•˜๋Š” ์•ก์…˜ { type: 'INCRE.. 2022. 11. 24.
useCallback, React.memo useCallback ํ•จ์ˆ˜๋ฅผ memoizationํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” hookํ•จ์ˆ˜ → useMemo์™€ ๋น„์Šทํ•œ Hook ๐Ÿ’ก useMemo๋Š” ํŠน์ • ๊ฒฐ๊ณผ๊ฐ’์„ ์žฌ์‚ฌ์šฉ ํ•  ๋•Œ ์‚ฌ์šฉ useCallback์€ ํŠน์ • ํ•จ์ˆ˜๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์žฌ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ ์ปดํฌ๋„ŒํŠธ์—์„œ props๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š์œผ๋ฉด Virtual DOM์— ์ƒˆ๋กœ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ๋„ ํ•˜์ง€ ์•Š๊ณ , ์ปดํฌ๋„ŒํŠธ์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ์žฌ์‚ฌ์šฉํ•˜๋Š” ์ตœ์ ํ™” ์ž‘์—… → ํ•จ์ˆ˜ ์žฌ์‚ฌ์šฉ ๊ธฐ๋ณธ ๊ตฌ์กฐ const memoizedCallback = useCallback(ํ•จ์ˆ˜, ๋ฐฐ์—ด); ์ฒซ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ: ์ธ์ž๋กœ ๋„˜์–ด์˜จ ํ•จ์ˆ˜ ๋‘ ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ: ๋„˜์–ด์˜จ ๋ฐฐ์—ด ๋‚ด์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๊นŒ์ง€ ์ €์žฅํ•ด๋†“๊ณ  ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋˜์–ด๋„ ๊ทธ ํ•จ์ˆ˜๊ฐ€ ์˜์กดํ•˜๋Š” ๊ฐ’๋“ค์ด ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ํ•œ ๊ธฐ์กด ํ•จ์ˆ˜ ๊ณ„.. 2022. 11. 24.
useEffect์™€ useMemo useEffect ํ•จ์ˆ˜ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ ๋งˆ๋‹ค ํŠน์ • ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” Hook component๊ฐ€ mount ๋˜์—ˆ์„ ๋•Œ[์ฒ˜์Œ ๋‚˜ํƒ€๋‚ฌ์„ ๋•Œ], component๊ฐ€ unmount๋˜์—ˆ์„ ๋•Œ[์‚ฌ๋ผ์งˆ ๋•Œ], component๊ฐ€ update๋˜์—ˆ์„ ๋•Œ[ํŠน์ • props๊ฐ€ ๋ฐ”๋€” ๋•Œ] ๊ธฐ๋ณธ ํ˜•ํƒœ useEffect(function, deps) function: ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•˜๋Š” ์ž‘์—…[ํ•จ์ˆ˜] deps: ๋ฐฐ์—ด ํ˜•ํƒœ, ๋ฐฐ์—ด ์•ˆ์—๋Š” ๊ฒ€์‚ฌํ•˜๊ณ ์ž ํ•˜๋Š” ํŠน์ • ๊ฐ’ ํ˜น์€ ๋นˆ ๋ฐฐ์—ด[์˜์กด๋˜๋Š” ๊ฐ’๋“ค] cleanup ํ•จ์ˆ˜: ํ•จ์ˆ˜ ๋ฐ˜ํ™˜, deps๊ฐ€ ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ฌ๋ผ์งˆ ๋•Œ ํ˜ธ์ถœ๋จ ์˜์กด๋˜๋Š” ๊ฐ’์˜ ๋ฐฐ์—ด์ด ๋น„์–ด ์žˆ์œผ๋ฉด, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒ˜์Œ ์ƒ์„ฑ๋  ๋•Œ์—๋งŒ ์ž‘์—…์ด ์‹คํ–‰๋˜๊ณ , ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์งˆ ๋•Œ๋Š” returnํ•ด์„œ.. 2022. 11. 23.
์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง ๋ Œ๋”๋ง์ด๋ž€? ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํ˜„์žฌ props์™€ state์˜ ์ƒํƒœ์— ๊ธฐ์ดˆํ•˜์—ฌ UI๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑํ• ์ง€ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ์š”์ฒญํ•˜๋Š” ์ž‘์—…์„ ์˜๋ฏธ DOM ์—…๋ฐ์ดํŠธ ๊ณผ์ • 1. render ๋‹จ๊ณ„: React.createElement๋กœ ์ƒ์„ฑ 2. reconciliation ๋‹จ๊ณ„: ์ด์ „ elements์™€ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ elements ๋น„๊ต 3. commit ๋‹จ๊ณ„: DOM ์—…๋ฐ์ดํŠธ re-render๋˜๋Š” ์ƒํ™ฉ 1. props๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ 2. state๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ 3. Context value๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ 4. ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ re-render๋˜์—ˆ์„ ๋•Œ → ์ตœ์ ํ™” ๋ฐฉ๋ฒ•: render๋‹จ๊ณ„์— ๋“ค์–ด๊ฐ€๋Š”(re-rendering) ํšŸ์ˆ˜ ์ค„์ด๊ธฐ [์ฐธ๊ณ ์‚ฌ์ดํŠธ] https://yujonglee.com/reactrendering.html .. 2022. 11. 23.