Post

๐ŸŽฌ ReactJS๋กœ ์˜ํ™” ์›น ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ (07) - Props, Memo

์ด๋ฒˆ์—๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ(App())๊ฐ€ state(์ƒํƒœ)๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋“ค์—๊ฒŒ๋Š” ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ ์ง€ ์•Œ์•„๋ณด์ž !

props์— function

props์—๋Š” text๋‚˜ boolean๊ฐ’๋งŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜๋„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function Btn({ text, onClick }) {
  return (
    <button
      onClick={onClick}
      style={{
        backgroundColor: "tomato",
        color: "white",
        padding: "10px 20px",
        borderRadius: 10,
        border: 0,
      }}
    >
      {text}
    </button>
  );
}
function App() {
  const [value, setValue] = React.useState("Save Changes");
  const changeValue = () => setValue("Revert Changes");
  return (
    <div>
      <Btn text={value} onClick={changeValue} />
      <Btn text="Continue" />
    </div>
  );
}

const root = document.getElementById("root");
ReactDOM.render(<App />, root);

<Btn text={value} onClick={changeValue} /> ์—ฌ๊ธฐ์„œ onClick์€ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์•„๋‹ˆ๋‹ค
์ด onClick์€ ๊ทธ๋ƒฅ ๋‚ด๊ฐ€ ์ง€์€ ์ด๋ฆ„์ด๊ณ ! button html ํƒœ๊ทธ ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด ์•„๋‹˜
์ด ์ „ ๊ฒŒ์‹œ๋ฌผ์—์„œ์˜ banana์ฒ˜๋Ÿผ function Btn({ text, onClick }) ์ด๋ ‡๊ฒŒ props์— ๋‚ด๊ฐ€ ์ง์ ‘ ๋„ฃ์–ด์„œ onClick์ด๋ผ๋Š” prop์„ ๊ฐ–๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค
๊ทธ๋ฆฌ๊ณ  button์€ onClick์ด๋ผ๋Š” onClick ๋ฆฌ์Šค๋„ˆ๋ฅผ ๊ฐ–๊ฒŒ ๋˜๋Š” ๊ฒƒ!

React.memo()

๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ state๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ๋‹น์—ฐํžˆ ๊ทธ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋“ค๋„ Re-render๊ฐ€ ์ผ์–ด๋‚˜๊ฒŒ ๋œ๋‹ค
๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์ด ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ์ด ๊ฒฝ์šฐ์—๋Š” React.memo()๋กœ prop์˜ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚œ ๋ถ€๋ถ„๋งŒ ๋ Œ๋”๋ง ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค
๋งŽ์€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์ธ ๊ฒฝ์šฐ์— ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค!

์ œ๋ชฉ ์—†๋Š” ๋™์˜์ƒ - Clipchamp๋กœ ์ œ์ž‘ (8)

Btn ํ•จ์ˆ˜์•ˆ์— ์ฝ˜์†”๋กœ๊ทธ๋ฅผ ์ฐ์–ด๋ณด๋ฉด ๋ฒ„ํŠผ ๋‘๊ฐœ ๋ชจ๋‘ ๋ฆฌ๋ Œ๋”๋ง์ด ์ผ์–ด๋‚œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
๊ทธ์น˜๋งŒ ์šฐ๋ฆฐ ๋‘๋ฒˆ์งธ ๋ฒ„ํŠผ์€ ๋‹ค์‹œ ๊ทธ๋ฆด ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— Memo๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•ด ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ๋ Œ๋”๋ง์ด ์ผ์–ด๋‚˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค๐Ÿคฉ

1
2
3
4
5
6
7
8
9
10
11
const MemorizedBtn = React.memo(Btn);
function App() {
  const [value, setValue] = React.useState("Save Changes");
  const changeValue = () => setValue("Revert Changes");
  return (
    <div>
      <MemorizedBtn text={value} onClick={changeValue} />
      <MemorizedBtn text="Continue" />
    </div>
  );
}

MemorizedBtn๋ผ๋Š” ๊ฒƒ์„ ๋งŒ๋“ค์–ด ์ ์šฉ์‹œ์ผœ์ฃผ๋ฉด

์ œ๋ชฉ ์—†๋Š” ๋™์˜์ƒ - Clipchamp๋กœ ์ œ์ž‘ (9)

์ฒซ๋ฒˆ์งธ ๋ฒ„ํŠผ๋งŒ ๋‹ค์‹œ ๊ทธ๋ ค์ง„ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค !!
Coooool

This post is licensed under CC BY 4.0 by the author.