๐ Nomad Coder ReactJS๋ก ์ํ ์น ์๋น์ค ๋ง๋ค๊ธฐ
๊ฐ์๋ ธํธ (2021 Updated ver.)
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์ ๋ํด ๋ ์์๋ณด์.