React Study

React - React.memo

2020. 12. 7. 23:46
๋ชฉ์ฐจ
  1. ๋ชฉ๋ก
  2. ๐Ÿ“Œ Introduction
  3. ๐Ÿ“Œ React.memo
  4. ๐Ÿ“Œ Conclusion
๋ฐ˜์‘ํ˜•

๋ชฉ๋ก

  • Introduction
  • React.memo
  • Conclusion

๐Ÿ“Œ Introduction

์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ง€๋‚œ ์‹œ๊ฐ„์— ์–ธ๊ธ‰ ํ–ˆ์—ˆ๋˜ React.memo์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ ๋žœ๋”๋ง์ด ๋ถˆํ•„์š”ํ• ๋•Œ ์“ธ์ˆ˜ ์žˆ์–ด์š”. ์ปดํฌ๋„ŒํŠธ ๋ฆฌ๋žœ๋”๋ง์„ ์ตœ์ ํ™” ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ๋ฒˆ ์ž์„ธํ•˜๊ฒŒ ์•Œ์•„๋ณผ๊ฒŒ์š”.

๐Ÿ“Œ React.memo

์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

export default๋ฅผ ํ•ด์ค„๋•Œ ๊ฐ์‹ธ์ฃผ์‹œ๋ฉด ๋˜์š”.

export default React.memo(CreateUser);

ํ˜น์€ ์ด๋ ‡๊ฒŒ๋„ ๊ฐ€๋Šฅํ•ด์š”.

// ์ด๋ ‡๊ฒŒ ์ƒ๊ธด ์•„์ด๋ฅผ
function User() {
  // ... 
}

// ์ด๋ ‡๊ฒŒ ๋ณ€๊ฒฝ์ด ๊ฐ์‹ธ์ค„์ˆ˜ ์žˆ์–ด์š”
const User = React.memo(function User(){
   // ...
});

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฐ”๋€Œ์—ˆ์„๋•Œ๋งŒ ๋ฆฌ๋žœ๋”๋ง์ด ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ React.memo์—์„œ๋Š” ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ propsAreEqual์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์š”. ๋งŒ์•ฝ propsAreEqual์— true๊ฐ€ ๋ฐ˜ํ™˜์ด ๋œ๋‹ค๋ฉด re rendering์„ ๋ฐฉ์ง€ํ•˜๊ณ  false๊ฐ€ ๋ฐ˜ํ™˜ ๋œ๋‹ค๋ฉด re rendering์„ ํ•ด์ฃผ๊ฒŒ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋กœ ํ•œ๋ฒˆ ๋ณผ๊ฒŒ์š”.

export default React.memo(
  UserList,
  (prevProps, nextProps) => prevProps.users === nextProps.users
);

์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ๋Š” ์ „์˜ props๋ฅผ ๋ฐ›์•„์˜ค๊ฒŒ ๋˜๊ณ  ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ๋Š” ๋‹ค์Œ props๋ฅผ ๋ฐ›์•„์˜ต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  users๊ฐ€ ๋งŒ์•ฝ ์ „๊ณผ ํ›„๊ฐ€ ์ผ์น˜ ํ•œ๋‹ค๋ฉด re rendering์„ ๋ฐฉ์ง€ํ•ด์ค„์ˆ˜ ์žˆ์–ด์š”.

์ถ”๊ฐ€์ ์œผ๋กœ ์กฐ๊ธˆ๋” ์ตœ์ ํ™”๋ฅผ ์‹œ์ผœ๋ณด์ž๋ฉด ์ „ ํฌ์ŠคํŒ…์—์„œ์˜ onToggle์„ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

const onToggle = useCallback(
    (userId) => {
      setUsers(
        users.map((user) =>
          user.id === userId ? { ...user, active: !user.active } : user
        )
      );
    },
    [users]
  );

์ด๋ ‡๊ฒŒ ์ƒ๊ธด ์•„์ด๋ฅผ setUsers์— dep๋ฅผ ์ง€์›Œ์ค„์ˆ˜ ์žˆ์–ด์š”.

const onToggle = useCallback((userId) => {
    setUsers((users) =>
      users.map((user) =>
        user.id === userId ? { ...user, active: !user.active } : user
      )
    );
  }, []);

์ด๋ ‡๊ฒŒ ํ•ด์ค€๋‹ค๋ฉด ์ด์ œ deps๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์† ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒ ์ฃ ?

๐Ÿ“Œ Conclusion

์ด๋ ‡๊ฒŒ React.memo์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์•ž์„  2 ํฌ์ŠคํŒ…๋„ ์ตœ์ ํ™”์— ๊ด€ํ•œ ๋‚ด์šฉ์ด์—ˆ์ง€๋งŒ ๊ทธ์ค‘์— ๊ฐ€์žฅ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™” ์‹œํ‚ฌ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ React.memo, useCallback, useMemo์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ๋‚จ๋ฐœํ•˜๊ฒŒ ๋˜๋ฉด ์˜คํžˆ๋ ค ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ์‹คํ–‰ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ์ˆ˜๋„ ์žˆ์–ด์š”. ๊ทธ๋Ÿฌ๋‹ˆ ๊ผญ ํ•„์š”ํ•œ ์ˆœ๊ฐ„์— ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•ด์ฃผ์‹œ๋ฉด ์ข‹์„๊ฑฐ ๊ฐ™์•„์š”. ๊ทธ๋Ÿผ ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๋งŒ๋‚˜์š” ์•ˆ๋…•!

๋ฐ˜์‘ํ˜•

'React Study' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

React - custom hook  (0) 2020.12.13
React - useReducer  (0) 2020.12.13
React - useCallback  (0) 2020.12.07
React - useMemo  (0) 2020.12.06
React - useEffect  (0) 2020.12.05
  1. ๋ชฉ๋ก
  2. ๐Ÿ“Œ Introduction
  3. ๐Ÿ“Œ React.memo
  4. ๐Ÿ“Œ Conclusion
'React Study' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • React - custom hook
  • React - useReducer
  • React - useCallback
  • React - useMemo
eddie0329
eddie0329
Front-end Developer
๋ฐ˜์‘ํ˜•
eddie0329
Eddie Sunny's Blog
eddie0329
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (100)
    • Summary of Book (0)
    • Vue Study (11)
    • Vue TDD (9)
    • Vue BDD (5)
    • Design Pattern (9)
    • Javascript Study (3)
    • React Study (15)
    • React TDD (1)
    • Vue Storybook (2)
    • Refactoring (0)
    • Graphql_Apollo (3)
    • Svelte (8)
    • Open Source (1)
    • D3 (4)
    • Typescript (1)
    • CSS (2)
    • Android (0)
    • Java (0)
    • Kotlin (0)
    • ์žก๋‹ด (0)
    • Swift (19)
    • Rust (2)
    • ํšŒ์‚ฌ์ด์•ผ๊ธฐ (2)
    • ReactNative Study (2)
    • Vitest (0)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • Home

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • slot ํŒจํ„ด
  • Nextjs
  • vue cypress
  • apollo
  • svelte
  • Kotlin
  • storybook6
  • BDD
  • Javascript
  • swift5
  • vue storybook
  • swift
  • Cypress
  • javascript pattern
  • jest
  • Design Pattern
  • vue bdd
  • client only
  • Vue
  • TDD
  • TypeScript
  • vue tdd
  • React Native
  • react
  • CSS
  • D3
  • Vue test
  • react-component-slot
  • react useRef
  • vue3

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.
eddie0329
React - React.memo
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.