์ด๋ฒ 5์ฃผ์ฐจ Weekly Paper ์์๋
- ์ด๋ฒ์ฃผ ๊ฐ์ ํ๊ธฐ ๋ฐ ์ค์ค๋ก์ ๋ํ ํผ๋๋ฐฑ
- useMemo, useCallback ์ ๋ํด ์ค๋ช ํ๊ณ , ์ด๋ค ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ฉด ์ข์์ง, ๋จ์ฉํ ๊ฒฝ์ฐ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ .
- ๋ฆฌ์กํธ์ ์๋ช ์ฃผ๊ธฐ(life cycle)
- React์์ ๋ฐฐ์ด์ ๋ ๋๋งํ ๋ key๋ฅผ ์ค์ ํด์ผ ํ๋ ์ด์ ์ key ์ค์ ์ ์ฃผ์ํ ์
์ ๋ค๋ฃน๋๋ค
์ด๋ฒ์ฃผ๋ ๋๋์ด React๋ฅผ ์์ํ๋ค!
ํ์ฌ๊น์ง useState, useEffect ํ
, ๋น๋๊ธฐ์ ์ธ ์ํ ์
๋ฐ์ดํธ ๋ฉ์ปค๋์ฆ, ํจ์ํ ์
๋ฐ์ดํธ,
์ปดํฌ๋ํธ ๊ตฌ์ฑ ์์, ์ด๋ฒคํธ ๋ฆฌ์ค๋, ์๋ฒ์์ฒญํ ๋ฐ์์ ๋ณด๋ฅผ ์ด๋ป๊ฒ ์จ์ผํ๋.. ๋ฑ๋ฑ๋ฑ.. ์ด๋์ ๋ ๋ฐฐ์ ๊ณ
์ ๋ชจ๋ฅด์ง๋ง
๋ฆฌ์กํธ๊ฐ ์ง์ง ํธํ๋ค๋ ๋๋์ ๋ฐ๊ธดํ๋ค..
๊ทผ๋ฐ CSS๋? ์ด๊ฑฐ ๋ง์ด์๋๋ค..
๊ทธ๋ฅ ์์์ด์๋จ..
์ํผ ์์ผ๋ก๋ ๋ ๋ง์ด ๋ฐฐ์ฐ๊ณ ์ถ๋ค! ์ฌ๋ฐ๊ธฐ๋ํ๊ณ
๋ญ๊ฐ ํด๋๊ตฌ์กฐ๊ฐ์๊ฑฐ ์ง๋๊ฒ ์๋นํ ๋ณต์กํ๋ค,
์ง๊ด์ ์ธ ์ด๋ฆ์ง๋๊ฒ๋ ์ด๋ ต๋ค;;
๋ญ๊ฐ ๋ณ๋ก ์์ด์ ๊ทธ๋ฐ๊ฐ?
๋ ๋๋ง ๊ณผ์ ์ค UI๋ฐฑ์๋๊ฐ ๋ด๋นํ๋ ๋ถ๋ถ์ ๋ญ๊ฐ๋ฅผ ๋์์ธ ํ ์๊ฐ ์๋ค๋ ์ฌ์ค์
Optionํ๊ทธ์ CSS๋จน์ธ๋ค๊ณ ํ์ง๊ฑฐ๋ฆฌํ๋ฉด์ ์ง์ ์ ์ผ๋ก ์ธ์งํ ์ ์์๋ค.
๊ทธ๋์ ๋ญ์ผ? ๋ญ์ผ? ํ๋ค๊ฐ ๊ทธ๋ฅ ๋ฐ๋ก ๋๋กญ๋ค์ด๋ฉ๋ด ๊ตฌํํ๋ค..
(์ ์ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๊ณผ์ ๊ณต๋ถํ ๋ ๋ถ๋ช ๋ฐฐ์ ๋๋ฐ ์ธ์งํ์ง ๋ชปํจ;;)
๊ทธ๋ฆฌ๊ณ ์ปดํฌ๋ํธ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ฃ๊ณ ๊ทธ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ฃ์ผ๋ฉด prop์ ๋ฌํ๊ธฐ๊ฐ
๋งค์ฐ ๊ท์ฐฎ๊ณ ๊ด๋ฆฌํ๊ธฐ ํ๋ค๋ค๋ ์ฌ์ค์ ์์๋ค
(๋์ค์ ์ํ๊ด๋ฆฌ์ ๋ฐฐ์ฐ๋ฉด ํธํด์ง๋ค๊ณ ๋ ํ๋ค)
useMemo๋ ๋ฉ๋ชจ์ด์ ์ด์ ๋ ๊ฐ์ ๋ฐํ๋ ํ ์ด๋ค.
์ด ํ ์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ํจ์๋ฅผ ๋ฐ๊ณ , ๋ ๋ฒ์งธ ์ธ์๋ก ์์กด์ฑ ๋ฐฐ์ด์ ๋ฐ๋๋ค.
const memoizedValue = useMemo(() => {
// ์ผ์~์ฒญ ๋ณต์กํ ๊ณ์ฐ (์ฝ์คํธ๊ฐ ๋์ ํจ์)
return computeExpensiveValue(a, b);
}, [a, b]);
์์กด์ฑ ๋ฐฐ์ด์ ์์๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง ๋ฉ๋ชจ์ด์ ์ด์ ๋ ๊ฐ์ด ๋ค์ ๊ณ์ฐ๋๋๋ฐ.
๋ณต์กํ ๊ณ์ฐ์ด ํ์ํ ํจ์์ ๊ฒฐ๊ณผ ๊ฐ์ ์ฌ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ ์ฉํ๋ค.
useCallback์ ๋ฉ๋ชจ์ด์ ์ด์ ๋ ํจ์๋ฅผ ๋ฐํํ๋ค.
์ด ํ ์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ํจ์๋ฅผ ๋ฐ๊ณ , ๋ ๋ฒ์งธ ์ธ์๋ก ์์กด์ฑ ๋ฐฐ์ด์ ๋ฐ๋๋ค.
์์กด์ฑ ๋ฐฐ์ด์ ์์๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง ์๋ก์ด ํจ์๊ฐ ์์ฑ๋๋ค.
์ด๋ฒคํธ ํธ๋ค๋ฌ ๊ฐ์ ํจ์๋ฅผ ์ฌ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ ์ฉํจ!
import React, { useCallback } from 'react';
const MyComponent = ({ a, b }) => {
const handleClick = useCallback(() => {
console.log(a, b);
}, [a, b]);
return <button onClick={handleClick}>Click me</button>;
};
handleClick ํจ์๋ฅผ onClick ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ก ์ฌ์ฉํ๋๋ฐ
a์ b๋ฅผ ์์กด์ฑ๋ฐฐ์ด๋ก ๋๊ธฐ๋๋ฌธ์,
ํด๋น ๊ฐ์ด ๋ณํ์ง ์๋์ด์์ ๊ณ์ํด์ ๊ฐ์ ํจ์ ์ธ์คํด์ค๋ฅผ ์ถ๋ ฅํ๋๊ฒ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ผ๋ฉด ๊ณ์ ์๋ก์ด ํจ์ ์ธ์คํด์ค๋ฅผ ์์ฑํด๋ด์ง๋ง, ์บ์ฑํด๋ ๋์ผ ํจ์ ์ธ์คํด์ค๋ฅผ ๋ถ๋ฌ์ ์ถ๋ ฅํ๋ํํ๋ก
๋ณด๋ค ์ฑ๋ฅ ์ต์ ํ์ ๋์์ ์ค๋ค!
useMemo์ useCallback์ ๋จ์ฉํ๋ฉด ์คํ๋ ค ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
๋ฉ๋ชจ์ด์ ์ด์ ์์ฒด๋ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ๋ชจ๋ ํจ์๋ ๊ฐ์ ๋ฉ๋ชจ์ด์ ์ด์ ํ ํ์๋ ์๋๊ฒ.
์์ต์ ์ ๋น๊ตํด์ ์ด๋์ชฝ์ด ๋ซ๊ฒ ๋ค~ ์ถ๊ณ ,
"์ด๊ฑด ์ข ํ์ํ๊ฒ ๋๋ฐ" ์ถ์ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ๋ ํฌ๊ฒ ์ธ ๋จ๊ณ๋ก ๋๋๋ค
๋ง์ดํ
(Mounting)
์
๋ฐ์ดํธ(Updating)
์ธ๋ง์ดํ
(Unmounting)
ํด๋์ค ์ปดํฌ๋ํธ์ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋๋ ๋ช
ํํ๊ฒ
"์ด๋ค๋จ๊ณ์์๋ ์ด๋ค ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค" ๋ผ๋๊ฒ ์กด์ฌํ์ง๋ง.
์ ๋ฐ์ดํธ๋ ํ ๋ค๋ก ์ธํด ํจ์ํ ์ปดํฌ๋ํธ๊ฐ ๋์ฑ ๊ฐ๋ ฅํด์ง๊ณ , ๊ฐ๋ ์ฑ์ด ์ข์์ง๋ฉด์ ์์ฆ์ ํจ์ํ ์ปดํฌ๋ํธ์ ํ ๊ธฐ๋ฐ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ ๋ฐฉ์์ผ๋ก ํ๋ก์ ํธ๋ค์ด ์งํ๋๋ ๋๋์ด๋ค.
๋ง์ดํธ(mount)๋ React ์ปดํฌ๋ํธ๊ฐ ์ฒ์์ผ๋ก DOM์ ์ฝ์
๋์ด ํ๋ฉด์ ํ์๋๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํ๋ค.
์ปดํฌ๋ํธ๊ฐ ์์ฑ๋๊ณ ์ด๊ธฐ ๋ ๋๋ง์ ํตํด ์ค์ DOM์ ๋ฐ์๋๋ ์์
์ด๋ค๊ฒฝ์ฐ๊ฐ ์์๊น?
React ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฒ์ ์์๋ ๋, ์ต์์ ์ปดํฌ๋ํธ(๋ณดํต App ์ปดํฌ๋ํธ)๊ฐ ๋ง์ดํธ๋๋ค
์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ๊ฑฐ๋ ๋ผ์ฐํฐ์ ๊ฒฝ๋ก๊ฐ ๋ณ๊ฒฝ๋๋ฉด
์๋ก์ด ํ์ด์ง์ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋๋ค
์ปดํฌ๋ํธ๊ฐ ์กฐ๊ฑด๋ถ๋ก ๋ ๋๋ง๋๋ ๊ฒฝ์ฐ
์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ด ์ปดํฌ๋ํธ๊ฐ ํ์๋๋ฉด ๋ง์ดํธ๋๋ค!
(์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ์ฌ ๋ง์ดํ์ด์ง ์ปดํฌ๋ํธ๊ฐ ํ์๋๋ ๋ฑ..)
๋ถ๋ชจ ์ปดํฌ๋ํธ์ ์ํ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์์ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋๋ ๊ฒฝ์ฐ
์์ ์ปดํฌ๋ํธ๋ ๋ง์ดํธ๋๋ค
๊ฐ๋ฐ์๊ฐ ์๋์ ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ
(์๋ฅผ ๋ค์ด ๋ชจ๋ฌ ์ฐฝ์ด๋ ํดํ๊ณผ ๊ฐ์ ์ผ์์ ์ธ UI ์์๋ฅผ ์ฌ๋ ๊ฒฝ์ฐ)
๋ง์ดํธ ์์๋ ์ปดํฌ๋ํธ์ ์ด๊ธฐ ์ค์ ์ด๋ ๋ฐ์ดํฐ ํ์นญ๊ณผ ๊ฐ์
์์
์ ์ํํ ์ ์๋ค.
์ด๋ฅผ ์ํด useEffect ํ ์ ์ฌ์ฉํ๋๋ฐ..
Copy code
import React, { useEffect } from 'react';
const MyComponent = () => {
useEffect(() => {
console.log('Component mounted');
//์ด๊ธฐํ๋ฉด๊ตฌ์ฑ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์จ๋ค๊ฑฐ๋..
}, []);
return <div>My Component</div>;
};
์ด ์ฝ๋์์ useEffect ํ ์ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋ ํ ๋ฒ๋ง ์คํ๋๋ค.
๋น ์์กด์ฑ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ง์ดํธ๋ ๋๋ง ํจ๊ณผ๊ฐ ์คํ๋๋๋ก ํ๋ค! (๊ทธ๋ฅ ๋น์ด์๋ ๋ฐฐ์ด์ ์์กด์ฑ์ผ๋ก ๋๋ฉด ์ปดํฌ๋ํธ์ ์ํ๋ prop๋ณ๊ฒฝ์ ๋ฐ์ํ์ง ์๋๋ค, ์ฒ์ ๋ ๋๋ง๋๋ง ๋ฑ ์คํ๋๋๊ฒ)
์
๋ฐ์ดํธ(update)๋ React ์ปดํฌ๋ํธ์ ์ํ๋ ์์ฑ(props)์ด ๋ณ๊ฒฝ๋์ด ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง๋๋ ์ํฉ์ด๋ค.
์ด๋ ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ง์ดํธ๋ ํ์ ๋ฐ์ํ๋ค!
์ด๋ค๊ฒฝ์ฐ๊ฐ ์์๊น?
๊ทธ๋ฅ ์ค๋ช ํ๋ ๋๋ก๋ค!
useState ํ ์ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌ๋๋ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง๋ฉ๋๋ค.
๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ์์ฑ(props)์ด ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง๋๋ค.
useContext ํ ์ ์ฌ์ฉํ์ฌ ๊ตฌ๋ ์ค์ธ ์ปจํ ์คํธ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง๋๋ค.
๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋๋ฉด ์์ ์ปดํฌ๋ํธ๋ ๋ฆฌ๋ ๋๋ง๋ ์ ์๋ค!
์์ ์ปดํฌ๋ํธ์ ์ํ๋ ์์ฑ์ด ๋ณ๊ฒฝ๋์ง ์์๋๋ผ๋ ๋ฆฌ๋ ๋๋ง์ด ๋ฐ์ํ ์ ์์.
์ธ๋ง์ดํธ(unmount)๋ React ์ปดํฌ๋ํธ๊ฐ DOM์์ ์ ๊ฑฐ๋๋๊ฒ์ด๋ค.
์ปดํฌ๋ํธ๊ฐ ๋ ์ด์ ํ๋ฉด์ ํ์๋์ง ์๊ณ , ๊ด๋ จ๋ ๋ชจ๋ ์ํ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์ ๋ฆฌ๋๋ ์์
์ด๋ค๊ฒฝ์ฐ๊ฐ ์์๊น?
๋ง์ดํธ์ ๋ฐ๋๋๋ ๊ฒฝ์ฐ๊ฐ ์์์ ์๊ฒ ๋ค.
์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ง ์๊ฒ๋์๋ค๋๊ฐ
๋ผ์ฐํฐ๊ฒฝ๋ก ๋ณ๊ฒฝ์ผ๋ก ์๋์๋ ํ์ด์ง๊ฐ ์ธ๋ง์ดํธ๋์๋ค๋๊ฐ.. ํ๋๊ฒฝ์ฐ ?
๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ์ ์ผ๋ก ๋ง์ดํธ์ ๋์ผํ
๊ฐ๋ฐ์๊ฐ ์๋์ ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ์ ๊ฑฐํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ฒ ๋๋ฐ.
์๋ฅผ ๋ค์ด ๋ชจ๋ฌ ์ฐฝ์ด๋ ํดํ๊ณผ ๊ฐ์ ์ผ์์ ์ธ UI ์์๋ฅผ ๋ซ๋ ๊ฒฝ์ฐ๋ ์๊ฒ ๋๋ฐ,
์ธ๋ง์ดํธ ์์๋ ์ปดํฌ๋ํธ์ ์ํ์ ๊ด๋ จ๋ ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํด์ผ ํ๋ค.
์ด๋ฅผ ์ํด useEffect ํ
์ ๋ฐํ ํจ์(cleanup ํจ์)๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
javascript
Copy code
import React, { useEffect } from 'react';
const MyComponent = () => {
useEffect(() => {
console.log('Component mounted');
return () => {
console.log('Component unmounted');
// ๋ฆฌ์์ค์ ๋ฆฌํ๊ธฐ
};
}, []);
return <div>My Component</div>;
};
useEffect ํ
์ ๋ฐํ ํจ์๋
์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋ ๋ ์คํ๋์ด ํ์ํ ์ ๋ฆฌ ์์
์ ์ํํ๋ค!
๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ cleanup ํจ์ ๋ผ๊ณ ๋ถ๋ฅธ๋ค!
(ํ์นญ์ ์ทจ์ํ๋ค๋๊ฐ, ์ธ๋ถ API์ ๊ตฌ๋
์ ํด์ ํ๋ค๋๊ฐ ๋ฑ..)
useEffect ํ
์ ํด๋์ค ์ปดํฌ๋ํธ์ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋์
์ ์ฌํ ๊ธฐ๋ฅ์ ํจ์ํ ์ปดํฌ๋ํธ์์ ์ํํ๋ค.
์ฒซ ๋ฒ์งธ ์ธ์๋ก ํจ์๋ฅผ ๋ฐ๊ณ , ๋ ๋ฒ์งธ ์ธ์๋ก ์์กด์ฑ ๋ฐฐ์ด์ ๋ฐ๋๋ค!
์์กด์ฑ ๋ฐฐ์ด์ ์์๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง side effect๊ฐ ์คํ๋๋ค.
๋ง์ดํ , ์ ๋ฐ์ดํธ, ์ธ๋ง์ดํ ๋ชจ๋ ๋จ๊ณ์์ ์ฌ์ฉํ ์ ์๋ค!
์ฑ๋ฅ ์ต์ ํ์ ์ปดํฌ๋ํธ ์ธ์คํด์ค์ ์์ ์ฑ์ ์ํด์
๊ผญ ํ์ํ key!
์ผ๋ฐ์ ์ผ๋ก๋ ๋ฐฐ์ด์ ๋ ๋๋งํ ๋๋ mapํจ์๋ฅผ ์ฐ์ง์๋๊ฐ?
์ด๋ ๊ฐ ์์์ ๋ฐฐ์ด๋ด์ ๊ณ ์ ํ ์์๋ฅผ key์์ฑ์ผ๋ก ๋ถ์ฌํ๋ค!
key ์์ฑ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฐ์ผ๋ก๋
๊ฐ ์๋ค!
React๋ key๋ผ๋ ๊ณ ์ ์๋ณ์๋ฅผ ํตํด ์ด๋ค ํญ๋ชฉ์ ๋ณ๊ฒฝ, ์ถ๊ฐ ๋๋ ์ญ์ ํ ์ง์ ์์ด์ ๋์์ ๋ฐ๋๋ค.
key๊ฐ ์์ผ๋ฉด React๋ ๋ฐฐ์ด์ ์์์ ๋ฐ๋ผ ํญ๋ชฉ์ ์๋ณํ๋ฏ๋ก,
๋ฐฐ์ด์ ์์๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์์์น ๋ชปํ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์๋ค.
key๋ ๊ณ ์ ํด์ผ ํ๋ฉฐ,
๋ฐฐ์ด ๋ด์์ ์ค๋ณต๋์ง ์์์ผ ํ๋ค.
๊ฐ๋ฅํ๋ฉด ์ธ๋ฑ์ค ๋์ ๋ฐ์ดํฐ์ ID๋ฅผ key๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ธ๋ฑ์ค๋ฅผ key๋ก ์ฌ์ฉํ๋ฉด
๋ฐฐ์ด์ ์์๊ฐ ๋ณ๊ฒฝ๋ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ๋๋ฌธ
(๋ฐ๋ ค๋ฒ๋ฆฐ ์์๋๋ฌธ์ ์ด์ํ ์์๋ฅผ ์
๋ฐ์ดํธํ๋ค๋๊ฐ)
์ปดํจํฐํ๋ก๊ทธ๋จ์ ๋์ผํ๊ณ์ฐ์ ๋นํจ์จ์ ์ผ๋ก ๋ฐ๋ณตํ๋๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด์
์ด์ ์ ๊ณ์ฐ๋์๋ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ณ ์ฌ์ฌ์ฉํ๋ ๊ฒ!
ํจ์๊ฐ ํธ์ถ๋๋ฉด ์
๋ ฅ๊ฐ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๊ณ
๋์ผํ ์
๋ ฅ๊ฐ์ผ๋ก ํจ์๊ฐ ๋ค์ ํธ์ถ๋๋ฉด, ๋ฏธ๋ฆฌ ์ ์ฅํด๋ ๊ทธ์ ํด๋นํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์
๊ตณ์ด ๊ณ์ฐ์ ๋ฐ๋ณตํ์ง ์๋๊ฒ์ด๋ค!
๊ตณ์ด ๋์ผํ ์ฐ์ฐ์ ๋ฐ๋ณตํ์ง ์์ผ๋ ์๊ฐ์ ์ฝ์ ์ฅ์ ๊ณผ
์ฌ๊ทํจ์๋
๋์ ํ๋ก๊ทธ๋๋ฐ (ํผ๋ณด๋์น ์์ด๊ฐ์ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ์์๋ฌธ์ ๋ก ์ชผ๊ฐ๋ํํ)์ ๊ฒฝ์ฐ
ํจ์จ์ด ์ข๋ค๋ ์ฅ์ ์ด ์๋ค!
ํจ์๋ฅผ ํธ์ถ, ์์ฑํ์ฌ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ค!
์ด๊ฒ ๋ญ์๋ฆฐ๊ฐ.. ์ถ์์๋ ์๋๋ฐ
"ํจ์ ์ธ์คํด์ค"๋ผ๋ ํํ์ ๋จ์ง ๊ฐ๋ณ ํจ์ ๊ฐ์ฒด๋ฅผ ์ง์นญํ๋ ๋ค๋ฅธ ๋ฐฉ์์ด๋ค.
ํจ์ ๊ทธ ์์ฒด๋ ์ฝ๋๋ฅผ ๋ด๊ณ ์๋ "์ค๊ณ๋" ๋ผ๊ณ ์๊ฐํ๋๊ฒ ํธํ๊ณ (๋ญ ํ ์ง ์ํํ๋ ์ฝ๋ ๋ธ๋ก)
ํจ์ ์ธ์คํด์ค๋ "์ค์ ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋๊ณ , ์คํ๋๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋, ํธ์ถ์ ๋์ํ๋ ๊ฐ์ฒด" ๋ผ๊ณ ๋ณผ์์๋๋ฐ
ํจ์๋ฅผ ์ ์ธํ ๋, ๋ณ์์ ํจ์๋ฅผ ํ ๋นํ ๋, ํ์ดํํจ์๋ฅผ ์ ์ํ๊ฑฐ๋ ํ ๋ ์์ฑ๋๋ค!
์ค์ํ ์ ์
์ด๋ฌํ ๋ฐฉ์์ผ๋ก ํจ์๋ฅผ ์ ์ํ๊ฑฐ๋ ์์ฑํ ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ์ ์๋ก์ด ํจ์ ๊ฐ์ฒด๊ฐ ๋ง๋ค์ด์ง๋ค๋ ๊ฒ์ด๋ค.
์ด ๊ฐ์ฒด๋ ํจ์์ ์ฝ๋, ์ค์ฝํ, ๊ทธ๋ฆฌ๊ณ ๊ธฐํ ํ๋กํผํฐ๋ค์ ํฌํจํ๋๊ฒ์ด๊ณ .
React ์ปดํฌ๋ํธ ๋ด์์ ์ด ๊ฐ๋ ์ด ํนํ ์ค์ํ ์ด์ ๋
์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋ ๋๋ง๋ค ์ปดํฌ๋ํธ ํจ์ ๋ด๋ถ์์ ์ ์๋ ํจ์๋ค์ด ์๋ก ์์ฑ๋๊ธฐ ๋๋ฌธ!
์ด๋ ๋๋๋ก ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ด๋ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ด์
useCallback๊ณผ ๊ฐ์ ํ ์ ์ฌ์ฉํ์ฌ ํจ์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฌ์ฉํ๋ ์ต์ ํ๊ฐ ํ์ํ ์ ์๋ค.
์์ฝํ๋ฉด,
ํจ์ ์ธ์คํด์ค๋ ๊ณ ์ ํ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ,
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์์
์ ์ํํ ์ ์๋ค
๊ฐ๊ฐ์ ํจ์ ์ธ์คํด์ค๋ ์๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐจ์งํ๋ค.!! ๊ทธ๋ฆฌ๊ณ react๋ ๋ฆฌ๋ ๋๋ง๋ง๋ค ์๋ก์ด ํจ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด๋ด๊ณ , ์ด๋ ์ต์ ํ๋ฅผ ํ์๋ก ํ ์ ์๋ค.
#์ฝ๋์์คํ๋ฆฐํธ #์คํ๋ฆฐํธํ์คํ1๊ธฐ #์ทจ์ ๊น์ง๋ฌ๋ฆฐ๋ค