2023/12/07(๋ชฉ)
๋ฆฌ์กํธ์์์ ๋๋ฑ ๋น๊ต
Object.is๋ก ๋จผ์ ๋น๊ต๋ฅผ ์ํ ->
๊ฐ์ฒด ๊ฐ ์์ ๋น๊ต๋ฅผ ํ ๋ฒ ๋ ์ํ
๊ฐ์ฒด ๊ฐ ์์ ๋น๊ต
Object.is๋ ES6์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ ๋ฆฌ์กํธ์์๋ ์ด๋ฅผ ๊ตฌํํ ํด๋ฆฌํ(Polyfill)์ ํจ๊ป ์ฌ์ฉํ๋ค.
ํด๋ฆฌํ(polyfill)
๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ํ์ง ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ง์ ๊ฐ๋ฅํ๋๋ก ๋ณํํ ์ฝ๋
์์ ์ฝ๋๋ฅผ ํตํด ์ดํด๋ณด์.
<script>
//ObjectIs ํจ์๋ฅผ ์ฌ์ฉํ shallowEqual๋ผ๋ ํจ์ ์์ฑ
//์๋ ๋งํฌ ์ฐธ๊ณ
//Object.is๋ ์ฐธ์กฐ๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ํด ๋น๊ต๊ฐ ๋ถ๊ฐ๋ฅ
Object.is({ hello: 'world'}, { hello: 'world' }) // false
// shallowEqualํจ์๋ ๊ฐ์ฒด์ 1 depth๊น์ง๋ ๋น๊ต๊ฐ ๊ฐ๋ฅ
shallowEqual({ hello: 'world'}, { hello: 'world' }) // true
// 2 depth๊น์ง ๊ฐ๋ฉด ์ด๋ฅผ ๋น๊ตํ ๋ฐฉ๋ฒ์ด ์์ผ๋ฏ๋ก false๋ฅผ ๋ฐํ
shallowEqual({hello: {hi: 'world'}},{hello: {hi: 'world'}})//false
</script>
๐๐ป ์ฐธ๊ณ
๊ทธ๋ ๋ค๋ฉด ์? ์ด๋์ ์ด๋ป๊ฒ Object.is๋ฅผ ์ฌ์ฉํ ๊น?
props๊ฐ ๊น์ด์ง๋ ๊ฒฝ์ฐ
๊ฐ์ฒด ์์ ๋ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์์ ๊ฒฝ์ฐ
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ฆฌ์กํธ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์์๋ ํ๊ณ๋ฅผ ๋ฐ์ด๋์ ์ ์์ผ๋ฏ๋ก ์์ ๋น๊ต๋ง์ ์ฌ์ฉํด ๋น๊ต๋ฅผ ์ํํด ํ์ํ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ํน์ง์ ์ ์์งํ๋ค๋ฉด ํฅ ํ
ํจ์ํ ์ปดํฌ๋ํธ์์ ์ฌ์ฉ๋๋ ํ ์ ์์กด์ฑ ๋ฐฐ์ด์ ๋น๊ต
๋ ๋๋ง ๋ฐฉ์ง๋ฅผ ๋์ด์ useMemo์ useCallback์ ํ์์ฑ
๋ ๋๋ง ์ต์ ํ๋ฅผ ์ํด์ ๊ผญ ํ์ํ React.memo๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์๋์ํค๊ธฐ ์ํด
๊ณ ๋ คํด์ผ ํ ๊ฒ๋ค์ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค๊ณ ํ๋ค.
๊ฐ์ธ์ ์ธ ์๊ฐ์ ๊ฐํ ์ด์ผ๊ธฐํ์๋ฉด ์ด ์ฑํฐ์ ๋ด์ฉ ์ ์ฒด๋ฅผ ์ดํด ํ๋ ค๋ฉด
JS, React์ ๋ํด ์ด๋์ ๋ ์์งํ ์ํ์ธ ์ฌ๋์ด์ฌ์ผ
๋ด์ฉ ์ ์ฒดํ๋ฆ์ ํ์
ํ๊ธฐ ์์ํ ๊ฒ ๊ฐ๋ค.
์ด๋ฒ ์ฑํฐ์ ํ์ต๋ด์ฉ์ ์๋ฒฝํ๊ฒ ์ดํดํ์ง ๋ชปํ์ง๋ง
๋๋ฆ๋๋ก ์ดํดํ ๋ด์ฉ์ ๋๋ง์ ๋ฐฉ์์ผ๋ก
ํ์ด์ ์์ฑํ๋ค.
โก๏ธ ๋ค์์ ํจ์์ ๋ํด ์์๋ณด์.