์ปดํฌ๋ํธ๊ฐ ์ฌ๋ ๋๋ง๋๋ฉด ๊ฑฐ๊ธฐ ์์ ์๋ ์์์ปดํฌ๋ํธ๋ ํญ์ ํจ๊ป ์ฌ๋ ๋๋ง๋๋ค.
์ด๋ฐ ์ฌ๋ ๋๋ง์ ๋ง๊ณ ์ถ์ ๋ ์์์ 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>
)
}
'๐ปWEB FrontEnd > ํ๋ ์์ํฌ React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
PWA(Progressive Web App) (0) | 2022.07.15 |
---|---|
์ฑ๋ฅ๊ฐ์ (3) - batching, useTransition, useDeferredValue (0) | 2022.07.13 |
์ฑ๋ฅ๊ฐ์ (1) - lazy import (0) | 2022.07.13 |
react-query : ์ค์๊ฐ ๋ฐ์ดํฐ๊ฐ ์ค์ํ ๋? (0) | 2022.07.13 |
localStorage (0) | 2022.07.13 |