๐ฌ 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์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ๋ถ๋ถ๋ง ๋ ๋๋ง ์ํฌ ์ ์๋ค
๋ง์ ์์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ธ ๊ฒฝ์ฐ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค!
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๋ผ๋ ๊ฒ์ ๋ง๋ค์ด ์ ์ฉ์์ผ์ฃผ๋ฉด
์ฒซ๋ฒ์งธ ๋ฒํผ๋ง ๋ค์ ๊ทธ๋ ค์ง ๊ฒ์ ์ ์ ์๋ค !!
Coooool