[React] Movie-app Notes - Memo

KAYAยท2021๋…„ 11์›” 9์ผ
0

[React] Movie-App

๋ชฉ๋ก ๋ณด๊ธฐ
6/11

๐Ÿ“’ Nomad Coder ReactJS๋กœ ์˜ํ™” ์›น ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ
๊ฐ•์˜๋…ธํŠธ (2021 Updated ver.)


# 5. Memo

memo() ๋ฅผ ์‚ฌ์šฉํ•ด ๋ Œ๋”๋ง ์‹œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ปจํŠธ๋กค ํ•ด๋ณด์ž.
(์•Œ๊ณ ๋งŒ ์žˆ์œผ๋ฉด ๋˜๋Š” ๊ธฐ๋Šฅ)

Components๋Š” ์–ธ์ œ ๋‹ค์‹œ ๋ Œ๋”๋ง์ด ๋ ๊นŒ?

Props์—์„œ ์ด์–ด๊ฐ€๋ณด์ž.
3๋ฒˆ์งธ ์ค„์—์„œ render point log๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ Œ๋”๋ง์ด ๋˜๋Š” ์‹œ์ ์„ ์•Œ์•„๋ณด์ž.


<script type="text/babel">
  function Btn({ name, onClick }) {
    console.log(name, 'was rendered'); // render point log
    return (
      <button
        onClick={onClick}
        style={{
          backgroundColor: 'gray',
          border: 0,
          borderRadius: 20,
          padding: 10,
          color: 'white',
          margin: '10px',
        }}
      >
        {name}
      </button >
    )
  }

  function App() {
    const [value, setValue] = React.useState("origin");
    const changeValue = () => setValue("change");

    return (
      <div>
        <Btn name={value} onClick={changeValue} />
        <Btn name="reset" />
      </div>)
  }
  const root = document.getElementById("root")
  ReactDOM.render(<App />, root);
</script>

๊ฐ€์žฅ ์ฒ˜์Œ ์•ฑ์„ ์‹คํ–‰ํ•˜๋ฉด origin, reset ๋ฒ„ํŠผ์ด App() ์ปดํฌ๋„ŒํŠธ์˜ state์— ๋”ฐ๋ผ ๋ Œ๋”๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  origin ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด change๋กœ ๋ฒ„ํŠผ์ด ๋ณ€๊ฒฝ๋œ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๋ณ€ํ™”๋œ ๊ฐ’์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— App()์€ re-rendering์ด ์ผ์–ด๋‚œ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฐ”๋€ ๊ฐ’์€ ์ฒซ ๋ฒˆ์งธ ๋ฒ„ํŠผ์˜ name ๋ฟ์ธ๋ฐ ์™œ reset๊นŒ์ง€ rendering ๋˜๋Š”๊ฑธ๊นŒ?

๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ App()์˜ ์ƒํƒœ์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒผ๋‹ค๋ฉด ์ปดํฌ๋„ŒํŠธ ์ž์ฒด๋Š” ์ „์ฒด์ ์œผ๋กœ ๋ Œ๋”๋ง๋œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— reset ๋ฒ„ํŠผ์—๋Š” ๊ฐ’์˜ ๋ณ€ํ™”๊ฐ€ ์—†์—ˆ๋”๋ผ๋„ ๋‹ค์‹œ ๋ Œ๋”๋ง๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๋งŒ์•ฝ, ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ์ˆ˜์ฒœ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•˜๋‚˜์˜ ์ƒํƒœ๊ฐ€ ๋ณ€ํ–ˆ์ง€๋งŒ ์ˆ˜ ์ฒœ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹ค์‹œ ๋ Œ๋”๋ง๋  ๊ฒƒ์ด๋‹ค. ์ด๋Š” ์•ฑ์˜ ์†๋„๋ฅผ ์ €ํ•˜์‹œํ‚ค๊ณ  ํšจ์œจ์„ ๋–จ์–ด๋œจ๋ฆด ๊ฒƒ์ด๋‹ค.

์ด๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฒƒ์ด ์„ ํƒ์ ์œผ๋กœ ๋ Œ๋”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Memo๋ฅผ ์ด์šฉํ•ด์„œ state์— ๋ณ€ํ™”๊ฐ€ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋งŒ ์žฌ๋ Œ๋”๋งํ•˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

React.memo()์— ์›๋ž˜ ๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•ด ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ Returnํ•œ๋‹ค.

์ฒ˜์Œ๊ณผ ๋‹ค๋ฅด๊ฒŒ reset์€ ์žฌ๋ Œ๋”๋ง๋˜์ง€ ์•Š์€ ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


Summery

๋น ๋ฅธ ์•ฑ ๊ตฌ๋™, ์•ˆ์ •์„ฑ์„ ์œ„ํ•ด ๋ณ€ํ™”ํ•˜๋Š” ๊ฐ’์„ ์„ ํƒ์ ์œผ๋กœ ๋ Œ๋”ํ•  ์ˆ˜ ์žˆ๋Š” Memo์˜ ์“ฐ์ž„์„ ์•Œ์ž.

+ ) ๋‚˜์ค‘์— ๋ฐฐ์šฐ๋Š” useEffect()๋กœ ์—ฌ๊ธฐ์„œ ์“ฐ์ด๋Š” memo() ์‚ฌ์šฉ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค. ์‹ค์ œ react ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ๋ Œ๋”๋ฅผ ์ œ์–ดํ•  ๋ชฉ์ ์œผ๋กœ memo๋ฅผ ์“ฐ์ง„ ์•Š๊ณ , useEffect()๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์ถ”ํ›„ react Hooks์— ๋Œ€ํ•ด ๋” ์•Œ์•„๋ณด์ž.

profile
๊ฒ…๋ถ€ํ•˜์ž

0๊ฐœ์˜ ๋Œ“๊ธ€