React ํ๋ก์ ํธ๋ฅผ ์์ํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก index.tsx
์ ์๋์ ๊ฐ์ ์ฝ๋๊ฐ ๋ค์ด๊ฐ๋ค.
<React.StrictMode>
<App />
</React.StrictMode>
์ฒ์์๋ ๊ทธ๋ฅ "๊ฐ๋ฐ์ฉ์ด๊ฒ ์ง" ํ๊ณ ์ง๋์น๊ธฐ ์ฌ์ด๋ฐ,
์๊ณ ๋ณด๋ฉด React.StrictMode๋ ๊ฝค ์ค์ํ ์ญํ ์ ํ๋ค.
์ด๋ฒ ๊ธ์์๋ StrictMode๊ฐ ์ ํํ ๋ฌด์จ ์ผ์ ํ๋์ง,
์ธ์ ์ผ๊ณ ๊บผ์ผ ํ๋์ง๋ฅผ ์ ๋ฆฌํด๋ดค๋ค.
๊ฐ๋ฐ ํ๊ฒฝ์์๋ง ์๋ํ๋ ๊ฐ๋ฐ์ ๋๊ตฌ
React ์ฑ์์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ํ์งํ ์ ์๋๋ก ๋์์ค๋ค.
function Test() {
console.log('๋ ๋๋ง');
return <div>ํ
์คํธ</div>;
}
StrictMode์์๋ console.log
๊ฐ 2๋ฒ ์คํ๋จ
โ React๊ฐ "์ด ํจ์๊ฐ ์์ํ๊ฒ ๋์ํ๋์ง" ๊ฒ์ฆํ๊ธฐ ์ํด ์๋์ ์ผ๋ก ๋ ๋ฒ ๋ ๋๋งํจ
useEffect
์ useLayoutEffect
clean-up ํ
์คํธuseEffect(() => {
console.log('์ดํํธ ์คํ');
return () => {
console.log('์ ๋ฆฌ ํจ์ ์คํ');
};
}, []);
StrictMode์์๋ ๋ง์ดํธ โ ์ธ๋ง์ดํธ โ ๋ค์ ๋ง์ดํธ
โ ์ฌ์ด๋ ์ดํํธ ์ ๋ฆฌ(clean-up)๊ฐ ์ ๋๋์ง ๊ฒ์ฆํ๋ ๋ชฉ์
componentWillMount
, ๋ฑ) ์ฌ์ฉ ์ ๊ฒฝ๊ณ ref
, unsafe context ์ฌ์ฉ ์๋์ ๋ํ ๊ฒฝ๊ณ โ ์ด๋ฅผ ํตํด React์ ๋ฏธ๋ ๋ฒ์ ์ ๋ฌธ์ ๊ฐ ๋ ์์๋ฅผ ๋ฏธ๋ฆฌ ์ฐพ์๋ผ ์ ์์
StrictMode๋ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ง ์๋ํ๊ณ
์ค์ ์ฌ์ฉ์์๊ฒ๋ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
โ
๊ทธ๋์ ๊ฑฑ์ ์์ด ์ฌ์ฉํด๋ ๋๋ค.
โ ๋จ, StrictMode์์ ๋ฐ์ํ ๋ ๋๋ง ๋ ๋ฒ ํ์์ ์ค์ ๋ฐฐํฌ์์ ๋ฐ์ํ์ง ์๋๋ค.
function Demo() {
const [count, setCount] = useState(0);
useEffect(() => {
console.log('๐ก useEffect');
return () => {
console.log('๐ด clean-up');
};
}, []);
return <button onClick={() => setCount(count + 1)}>+1</button>;
}
StrictMode ON
์ฝ์ ์ถ๋ ฅ:๐ก useEffect ๐ด clean-up ๐ก useEffect
์ด๊ฑธ ๋ชจ๋ฅด๊ณ ์๋ค๋ฉด,
"์ ์ปดํฌ๋ํธ๊ฐ ๋ ๋ฒ ๋ ๋๋ง๋์ง?"
"์ useEffect๊ฐ ๋ ๋ฒ ์คํ๋์ง?"
๊ฐ์ ํผ๋์ ๋น ์ง๊ฒ ๋๋ค.
์ฒ์์๋ ๊ทธ๋ฅ CRA(create-react-app)์์ ์๋์ผ๋ก ์ฐ๋๊น ๊ทธ๋ฐ๊ฐ๋ณด๋ค ํ๋๋ฐ,
์ง์ง ์ฌ์ด๋ ์ดํํธ๊ฐ ์๋์น ์๊ฒ DOM์ ๊ฑด๋๋ฆด ๋,
StrictMode๊ฐ ๊ทธ๊ฑธ ๋ฏธ๋ฆฌ ์๋ ค์ฃผ๋ ๋๋์ด ๋ค์๋ค.
๋๋ถ์ ์ํ ๊ด๋ฆฌ, useEffect
์ค๊ณํ ๋ "์ด๊ฒ ์์ํ๊ฒ ์๋ํ ๊น?"
ํ ๋ฒ ๋ ์ ๊ฒํ๊ฒ ๋๋ ์ต๊ด์ด ์๊ฒผ๋ค.
๐ "StrictMode๋ ํ ์คํธ๋ฅผ ์ํ ๊ฐํนํ ์ ์๋์ด๋ค.
์ง๊ธ์ ๊ท์ฐฎ์๋, ๋ฏธ๋์ ์์ ์ฑ์ผ๋ก ๋์์จ๋ค."