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

๐Ÿ’ปWEB FrontEnd/ํ”„๋ ˆ์ž„์›Œํฌ React

์„ฑ๋Šฅ๊ฐœ์„ (2) - ์žฌ๋ Œ๋”๋ง ๋ง‰๋Š” ๋ฒ•

์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žฌ๋ Œ๋”๋ง๋˜๋ฉด ๊ฑฐ๊ธฐ ์•ˆ์— ์žˆ๋Š” ์ž์‹์ปดํฌ๋„ŒํŠธ๋Š” ํ•ญ์ƒ ํ•จ๊ป˜ ์žฌ๋ Œ๋”๋ง๋œ๋‹ค.

์ด๋Ÿฐ ์žฌ๋ Œ๋”๋ง์„ ๋ง‰๊ณ  ์‹ถ์„ ๋• ์ž์‹์„ memo๋กœ ๊ฐ์‹ธ๋†“์œผ๋ฉด ๋œ๋‹ค. 

 

memo()๋กœ ์ปดํฌ๋„ŒํŠธ ๋ถˆํ•„์š”ํ•œ ์žฌ๋ Œ๋”๋ง ๋ง‰๊ธฐ

step 1) memo๋ฅผ 'react' ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋ถ€ํ„ฐ import ํ•ด์™€์„œ

step 2) ์›ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ ์ •์˜๋ถ€๋ถ„์„ ๊ฐ์‹ผ๋‹ค. ๊ทผ๋ฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ let ์ปดํฌ๋„ŒํŠธ๋ช… = function( ){ } ์ด๋Ÿฐ ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์•ผ ๊ฐ์Œ€ ์ˆ˜ ์žˆ๋‹ค.

import {memo, useState} from 'react'

let Child = memo( function(){
  console.log('์žฌ๋ Œ๋”๋ง๋จ')
  return <div>์ž์‹์ž„</div>
})

function Cart(){ 

  let [count, setCount] = useState(0)

  return (
    <Child />
    <button onClick={()=>{ setCount(count+1) }}> + </button>
  )
}

๊ทธ๋Ÿผ ์ด์ œ Child๋กœ ์ „์†ก๋˜๋Š” props๊ฐ€ ๋ณ€ํ•˜๊ฑฐ๋‚˜ ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ์—๋งŒ ์žฌ๋ Œ๋”๋ง๋œ๋‹ค. 

 

Q. ์–ด ๊ทธ๋Ÿผ memo๋Š” ์ข‹์€๊ฑฐ๋‹ˆ๊นŒ ๋ง‰์จ๋„ ๋˜๊ฒ ๋„ค์š”?

memo๋กœ ๊ฐ์‹ผ ์ปดํฌ๋„ŒํŠธ๋Š” ํ—›๋œ ์žฌ๋ Œ๋”๋ง์„ ์•ˆ์‹œํ‚ค๋ ค๊ณ  ๊ธฐ์กด props์™€ ๋ฐ”๋€ props๋ฅผ ๋น„๊ตํ•˜๋Š” ์—ฐ์‚ฐ์ด ์ถ”๊ฐ€๋กœ ์ง„ํ–‰๋œ๋‹ค.

props๊ฐ€ ํฌ๊ณ  ๋ณต์žกํ•˜๋ฉด ์ด๊ฑฐ ์ž์ฒด๋กœ๋„ ๋ถ€๋‹ด์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ผญ ํ•„์š”ํ•œ ๊ณณ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค. 

 

useMemo

- ๋น„์Šทํ•œ useMemo๋ผ๋Š” ๋ฌธ๋ฒ•๋„ ์žˆ๋Š”๋ฐ ์ด๊ฑด useEffect์™€ ๋น„์Šทํ•œ ์šฉ๋„์ด๋‹ค.

- ์ปดํฌ๋„ŒํŠธ ๋กœ๋“œ์‹œ 1ํšŒ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ๊ฑฐ๊ธฐ ๋‹ด์œผ๋ฉด ๋œ๋‹ค. 

- useEffect ์ฒ˜๋Ÿผ dependency๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ์–ด์„œ ํŠน์ • state, props๊ฐ€ ๋ณ€ํ•  ๋•Œ๋งŒ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. 

import {useMemo, useState} from 'react'

function ํ•จ์ˆ˜(){
  return ๋ฐ˜๋ณต๋ฌธ10์–ต๋ฒˆ๋Œ๋ฆฐ๊ฒฐ๊ณผ
}

function Cart(){ 

  let result = useMemo(()=>{ return ํ•จ์ˆ˜() }, [])

  return (
    <Child />
    <button onClick={()=>{ setCount(count+1) }}> + </button>
  )
}