๐ ย ์ฐธ๊ณ ๋งํฌ
useEffect, useMemo ๊ทธ๋ฆฌ๊ณ useCallback ๊ฐ ์ฌ์ฉ๋ฒ๊ณผ ์ฐจ์ด
useCallback ์ฌ์ฉ๋ฒ
๐ ย ๋ฉ๋ชจ
[๊ฒฐ๋ก ] ๋ ๋๋ง ํ์๋ฅผ ์ค์ฌ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ์ถ์ ๋ useCallback ์ ์ฌ์ฉํ ์ ์๋ค.
-
useCallback + useEffect
=> useEffect ์์กด์ฑ์ด ํจ์์ผ ๊ฒฝ์ฐ useCallback ์ผ๋ก ๊ฐ์ธ ์ฐธ์กฐ๋ฅผ ๋์ผํ๊ฒ ํจ.
-
useCallback + React.memo
=> ์์ ์ปดํฌ๋ํธ๋ฅผ React.memo ๋ก ๊ฐ์ธ๋ฉด props ์์กด์ฑ์ด ๋ณํ ๋๋ง ๋ ๋๋ง ๋๋ค.
=> ์ด๋, ํจ์๋ ์ฐธ์กฐ๊ฐ์ด ๋ฌ๋ผ ํญ์ ์์กด์ฑ์ด ๋ณํ๋ฏ๋ก, ์ด๋ฅผ ๋ง๊ธฐ์ํด ํจ์๋ฅผ props ๋ก ์ ๋ฌํ๋ ๊ฒฝ์ฐ useCallback ์ผ๋ก ๊ฐ์ผ๋ค.
๋๋ useCallback + React.memo ๋ฅผ ์ฌ์ฉํด ํ์ ์ปดํฌ๋ํธ์ ๋ ๋๋ง ํ์๋ฅผ ์ค์ฌ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์๋ํจ.
๐ต ย useCallback + React.memo ์ฌ์ฉ์์
- 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 ๋ก ๊ฐ์ธ๊ธฐ
- 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}
}
โ
ย ์ฒดํฌ๋ฆฌ์คํธ
๐ ย ์ฐธ๊ณ ๋งํฌ
useEffect, useMemo ๊ทธ๋ฆฌ๊ณ useCallback ๊ฐ ์ฌ์ฉ๋ฒ๊ณผ ์ฐจ์ด
useCallback ์ฌ์ฉ๋ฒ
๐ ย ๋ฉ๋ชจ
[๊ฒฐ๋ก ] ๋ ๋๋ง ํ์๋ฅผ ์ค์ฌ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ ์ถ์ ๋ useCallback ์ ์ฌ์ฉํ ์ ์๋ค.
useCallback + useEffect
=> useEffect ์์กด์ฑ์ด ํจ์์ผ ๊ฒฝ์ฐ useCallback ์ผ๋ก ๊ฐ์ธ ์ฐธ์กฐ๋ฅผ ๋์ผํ๊ฒ ํจ.
useCallback + React.memo
=> ์์ ์ปดํฌ๋ํธ๋ฅผ React.memo ๋ก ๊ฐ์ธ๋ฉด props ์์กด์ฑ์ด ๋ณํ ๋๋ง ๋ ๋๋ง ๋๋ค.
=> ์ด๋, ํจ์๋ ์ฐธ์กฐ๊ฐ์ด ๋ฌ๋ผ ํญ์ ์์กด์ฑ์ด ๋ณํ๋ฏ๋ก, ์ด๋ฅผ ๋ง๊ธฐ์ํด ํจ์๋ฅผ props ๋ก ์ ๋ฌํ๋ ๊ฒฝ์ฐ useCallback ์ผ๋ก ๊ฐ์ผ๋ค.
๋๋ useCallback + React.memo ๋ฅผ ์ฌ์ฉํด ํ์ ์ปดํฌ๋ํธ์ ๋ ๋๋ง ํ์๋ฅผ ์ค์ฌ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์๋ํจ.
๐ต ย useCallback + React.memo ์ฌ์ฉ์์
paging ์ ์ด๋์๋ ์ฌ์ฉํ ์ ์๊ฒ๋ ๋ง๋ ํ์ ์ปดํฌ๋ํธ์ด๋ค.
์ด ์ปดํฌ๋ํธ๋ฅผ React.memo ๋ก ๊ฐ์ธ ์์กด์ฑ์ด ๋ณํ ๋๋ง ๋ ๋๋ง ๋๋๋ก ํ ๊ฒ์ด๋ค.
props => page, count, onChangePage
usePage ๋ paging ์ ์ํด ๋ง๋ ์ปค์คํ ํ ์ด๋ค.
( ์์กด์ฑ props ) onChangePage ํจ์๋ฅผ useCallback ์ผ๋ก ๊ฐ์ธ ์ฐธ์กฐ๋ฅผ ๋์ผํ๊ฒ ํด์ค๋ค.
โ ย ์ฒดํฌ๋ฆฌ์คํธ