[231012] useMemo , useCallback

useMemo , useCallback

  • ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ํ›… ํ•จ์ˆ˜
  • ๋‘˜ ๋‹ค ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ•˜๊ณ  ์ƒˆ๋กœ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ๋„์›€์„ ์ค€๋‹ค.
  • ๋‚จ๋ฐœํ•˜๋ฉด ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง, ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์— (์ฐธ๊ณ : https://velog.io/@lky5697/stop-using-usememo-now)

useMemo

  • ๊ฐ’์„ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ (์›์‹œ๊ฐ’)
  • ๋ณต์žกํ•œ ๋ฉ”๋ชจ ์—ฌ๋Ÿฌ๋ฒˆ ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
import { useMemo } from "react"

function MyComponent({ data }) {
  // data๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ expensiveCalculation ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ์‹คํ–‰
  const result = useMemo(() => {
    return expensiveCalculation(data)
  }, [data])

  return <div>{result}</div>
}

useCallback

  • ์ฝœ๋ฐฑํ•จ์ˆ˜ (์ฐธ์กฐ๊ฐ’์— ๋Œ€ํ•œ ๊ฒƒ)
  • useCallback ์„ ์“ฐ๋”๋ผ๋„ ๋ถ€๋ชจ๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง๋˜๋ฉด ์ž์‹๋„ ๋ฆฌ๋ Œ๋”๋ง ๋œ๋‹ค.
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ, ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋ฅผ react memo ๋กœ ๋ฐ”๊ฟ”์•ผ ์ž์‹์ปดํฌ๋„ŒํŠธ๊ฐ€ useCallback์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜๋„ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์ด ์ œ๋Œ€๋กœ ๋จ
import { useCallback } from "react"

function MyComponent({ onClick }) {
  const handleClick = useCallback(() => {
    // ํด๋ฆญ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ
  }, []) // ๋นˆ ์˜์กด์„ฑ ๋ฐฐ์—ด: ํ•ธ๋“ค๋Ÿฌ๋Š” ํ•ญ์ƒ ๋™์ผํ•œ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜

  return <button onClick={handleClick}>Click Me</button>
}

Categories:

Updated:

Leave a comment