Skip to content

useEffect VS useCallback VS useMemoย #5

@ijieun0123

Description

@ijieun0123

๐Ÿ”— ย  ์ฐธ๊ณ  ๋งํฌ

useEffect, useMemo ๊ทธ๋ฆฌ๊ณ  useCallback ๊ฐ ์‚ฌ์šฉ๋ฒ•๊ณผ ์ฐจ์ด
useCallback ์‚ฌ์šฉ๋ฒ•



๐Ÿ“ ย  ๋ฉ”๋ชจ

[๊ฒฐ๋ก ] ๋ Œ๋”๋ง ํšŸ์ˆ˜๋ฅผ ์ค„์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ณ  ์‹ถ์„ ๋•Œ useCallback ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • useCallback + useEffect
    => useEffect ์˜์กด์„ฑ์ด ํ•จ์ˆ˜์ผ ๊ฒฝ์šฐ useCallback ์œผ๋กœ ๊ฐ์‹ธ ์ฐธ์กฐ๋ฅผ ๋™์ผํ•˜๊ฒŒ ํ•จ.

  • useCallback + React.memo
    => ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋ฅผ React.memo ๋กœ ๊ฐ์‹ธ๋ฉด props ์˜์กด์„ฑ์ด ๋ณ€ํ•  ๋•Œ๋งŒ ๋ Œ๋”๋ง ๋œ๋‹ค.
    => ์ด๋•Œ, ํ•จ์ˆ˜๋Š” ์ฐธ์กฐ๊ฐ’์ด ๋‹ฌ๋ผ ํ•ญ์ƒ ์˜์กด์„ฑ์ด ๋ณ€ํ•˜๋ฏ€๋กœ, ์ด๋ฅผ ๋ง‰๊ธฐ์œ„ํ•ด ํ•จ์ˆ˜๋ฅผ props ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ useCallback ์œผ๋กœ ๊ฐ์‹ผ๋‹ค.

๋‚˜๋Š” useCallback + React.memo ๋ฅผ ์‚ฌ์šฉํ•ด ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ํšŸ์ˆ˜๋ฅผ ์ค„์—ฌ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์‹œ๋„ํ•จ.



๐Ÿ”ต ย  useCallback + React.memo ์‚ฌ์šฉ์˜ˆ์‹œ

  1. paging.js

paging ์€ ์–ด๋””์„œ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ๋งŒ๋“  ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์ด๋‹ค.
์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ React.memo ๋กœ ๊ฐ์‹ธ ์˜์กด์„ฑ์ด ๋ณ€ํ•  ๋•Œ๋งŒ ๋ Œ๋”๋ง ๋˜๋„๋ก ํ•  ๊ฒƒ์ด๋‹ค.
props => page, count, onChangePage

import Pagination from '@mui/material/Pagination'
import Stack from '@mui/material/Stack'
import React, {memo} from 'react'  // import memo

const Paging = ({page, count, onChangePage}) => {
  return (
    <Stack m={10} spacing={2} justifyContent="center" alignItems="center">
      <Pagination
        count={count > 10 ? 10 : count}
        color="primary"
        page={page}
        onChange={onChangePage}
      />
    </Stack>
  )
}

export default memo(Paging)  // ์ž์‹ ์ปดํฌ๋„ŒํŠธ React.memo ๋กœ ๊ฐ์‹ธ๊ธฐ

  1. usePage.js

usePage ๋Š” paging ์„ ์œ„ํ•ด ๋งŒ๋“  ์ปค์Šคํ…€ ํ›…์ด๋‹ค.
( ์˜์กด์„ฑ props ) onChangePage ํ•จ์ˆ˜๋ฅผ useCallback ์œผ๋กœ ๊ฐ์‹ธ ์ฐธ์กฐ๋ฅผ ๋™์ผํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

const usePage = value => {
  const [page, setPage] = useState(1)
  const onChangePage = useCallback((e, newPage) => setPage(newPage), [page])  // useCallback ์œผ๋กœ ๊ฐ์‹ธ ์ฐธ์กฐ๋ฅผ ๋™์ผํ•˜๋„๋ก

  useEffect(() => {
    setPage(1)
  }, [value ? value : null])

  return {page, onChangePage}
}


โœ… ย  ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • ๋ Œ๋”๋ง ํšŸ์ˆ˜๋ฅผ ์ •๋ง๋กœ ์ค„์—ฌ์ฃผ์—ˆ๋Š”์ง€ ํ™•์ธ์ด ํ•„์š”ํ•จ ( redux dev tool )
  • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋™์ผํ•œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋ถˆ๋ €์„ ๋•Œ๋งŒ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”๊ฑด์ง€ ํ™•์ธ์ด ํ•„์š”ํ•จ.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions