React.StrictMode ํบ์๋ณด๊ธฐ! ๐
React.StrictMode๋ React ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์ค ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ๊ณ ๊ฐ๋ฐ ๊ฒฝํ์ ๊ฐ์ ํ๊ธฐ ์ํ ๋๊ตฌ์ ๋๋ค. ์ด๋ UI๋ฅผ ๋ ์์ ํ๊ณ ์์ธก ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด์ฃผ๋ “๊ฐ๋ฐ ํ๊ฒฝ ์ ์ฉ ๋๊ตฌ”๋ก, ์์ฐ ํ๊ฒฝ์์๋ ์๋ํ์ง ์์ต๋๋ค.
React.StrictMode๊ฐ ์ ์ค์ํ์ง, ์ด๋ป๊ฒ ์๋ํ๋์ง, ๊ทธ๋ฆฌ๊ณ ์ค๋ฌด์์ ๋ง์ฃผ์น ์ ์๋ ์ฌ์ฉ๋ฒ๊ณผ ์ฃผ์์ ์ ํ๋์ฉ ์ดํด๋ณผ๊น์?
React.StrictMode๋? ๐ค
React.StrictMode๋ React์์ ์ ๊ณตํ๋ ๋ด์ฅ ์ปดํฌ๋ํธ๋ก, ๊ฐ๋ฐ ์ค ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ๊ฑฐ๋ ๊ฒฝ๊ณ ๋ฅผ ์ถ๋ ฅํ๋ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ ์์ ํ๊ณ ์์ ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ๋์ฃ .
์ฃผ์ ์ญํ
- Deprecated(ํ๊ธฐ ์์ ) ๋ฉ์๋ ๊ฒฝ๊ณ
- React์ ์ค๋๋ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋(์: componentWillMount, componentWillUpdate, componentWillReceiveProps) ์ฌ์ฉ ์ ๊ฒฝ๊ณ ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
- ์์ฌ์ค๋ฌ์ด ์ฌ์ด๋ ์ดํํธ ๊ฐ์ง
- ๋ฆฌ์กํธ์์์ ์ฌ์ด๋ ์ดํํธ๋ ์๋์น ์์ ๋์์ ์ ๋ฐํ ์ ์์ต๋๋ค. useEffect ํ ์์์ ์๋ชป๋ ์ฌ์ฉ์ด๋, ๋ ๋๋ง ๋์ค ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ์ฝ๋๋ฅผ ๊ฐ์งํฉ๋๋ค.
- ๋ฐฐ์น ์
๋ฐ์ดํธ ๊ฒ์ฌ
- ์ํ ์ ๋ฐ์ดํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ณํฉ๋๊ณ ์๋์ง ํ์ธํฉ๋๋ค.
- ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง ๊ฐ์ง
- React.StrictMode๋ ์ปดํฌ๋ํธ๋ฅผ ์๋์ ์ผ๋ก ๋ ๋ฒ ๋ ๋๋งํด ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ด๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ ์ ์๊ฒ ๋์์ค๋๋ค.
- ํ์
์์ ์ฑ ๋ฐ ์ฝ๋ ํ์ง ๊ฐ์
- React.StrictMode์ TypeScript ๋๋ PropTypes๋ฅผ ๊ฒฐํฉํ๋ฉด ํ์ ์์ ์ฑ์ ๋์ฑ ๊ฐํํ ์ ์์ต๋๋ค.
์ฌ์ฉ๋ฒ: ์ด๋ป๊ฒ ์ ์ฉํ ๊น? ๐
React.StrictMode๋ ๋ฃจํธ ์์ค ๋๋ ํน์ ์ปดํฌ๋ํธ์ ์ ์ฉํ ์ ์์ต๋๋ค. <React.StrictMode> ํ๊ทธ๋ก ๊ฐ์ธ๋ฉด ๋ฉ๋๋ค.
๋ฃจํธ ์์ค์์ ์ ์ฉํ๊ธฐ
import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
ํน์ ์ปดํฌ๋ํธ์๋ง ์ ์ฉํ๊ธฐ
function App() {
return (
<div>
<Header />
<React.StrictMode>
<MainContent />
</React.StrictMode>
<Footer />
</div>
);
}
React.StrictMode๊ฐ ๊ฐ์งํ๋ ๋ฌธ์ ๋ค โ ๏ธ
1. Legacy ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋
React์ ์ค๋๋ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋๊ฐ ๊ฐ์ง๋๋ฉด ๊ฒฝ๊ณ ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ ๋ฉ์๋๋ StrictMode์์ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์์ํต๋๋ค:
- componentWillMount
- componentWillReceiveProps
- componentWillUpdate
๋์์ผ๋ก๋ ์ต์ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋์ธ getDerivedStateFromProps ๋๋ componentDidUpdate๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
class MyComponent extends React.Component {
componentWillMount() {
console.log("์ด ๋ฉ์๋๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค!");
}
render() {
return <div>React.StrictMode์์ ๊ฒฝ๊ณ ๋ฐ์!</div>;
}
}
2. ์ฌ์ด๋ ์ดํํธ ๊ฐ์ง
React.StrictMode๋ ์ปดํฌ๋ํธ๋ฅผ ์๋์ ์ผ๋ก ๋ ๋ฒ ๋ ๋๋งํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์๋์ ๊ฐ์ ์ฌ์ด๋ ์ดํํธ๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค:
- ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋์ค ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ
- useEffect ๋๋ useLayoutEffect ๋ด๋ถ์์ ๋ถ์ ์ ํ๊ฒ ์ฌ์ฉ๋ ์ฝ๋
import React, { useState } from "react";
function SideEffectExample() {
const [count, setCount] = useState(0);
// ์๋ชป๋ ์ฌ์ฉ ์์: ๋ ๋๋ง ์ค ์ํ ๋ณ๊ฒฝ
if (count === 0) {
setCount(1); // React.StrictMode์์ ๊ฒฝ๊ณ ๋ฐ์!
}
return <p>Count: {count}</p>;
}
3. ์์ฌ์ค๋ฌ์ด findDOMNode ํธ์ถ
findDOMNode๋ React์ ์ค๋๋ API๋ก, StrictMode์์๋ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์์ํต๋๋ค. ๋์์ผ๋ก๋ ref๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
import React from "react";
import ReactDOM from "react-dom";
class MyComponent extends React.Component {
componentDidMount() {
ReactDOM.findDOMNode(this); // StrictMode ๊ฒฝ๊ณ ๋ฐ์
}
render() {
return <div>findDOMNode๋ ์ฌ์ฉํ์ง ๋ง์์!</div>;
}
}
๋์: ref ์ฌ์ฉํ๊ธฐ
class MyComponent extends React.Component {
divRef = React.createRef();
componentDidMount() {
console.log(this.divRef.current); // ref๋ฅผ ํตํด DOM ์์ ์ ๊ทผ
}
render() {
return <div ref={this.divRef}>ref ์ฌ์ฉํ๊ธฐ</div>;
}
}
4. ์ค๋ณต ํค ๋ฌธ์ ๊ฐ์ง
React์์ ๋ฐฐ์ด์ ์์๋ฅผ ๋ ๋๋งํ ๋ key๊ฐ ์ค๋ณต๋๊ฑฐ๋ ์๋ ๊ฒฝ์ฐ, StrictMode๊ฐ ์ด๋ฅผ ๊ฐ์งํฉ๋๋ค.
const items = ["A", "B", "C"];
function List() {
return (
<ul>
{items.map((item) => (
<li key={item}> // ์ค๋ณต ํค๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฒฝ๊ณ ๋ฐ์
{item}
</li>
))}
</ul>
);
}
์ค๋ฌด์์ StrictMode๊ฐ ํ์ํ ์ด์ ๐ก
- ๋ ๋์ ์ฝ๋ ํ์ง
- ๋ฌธ์ ๋ฅผ ์ฌ์ ์ ๊ฐ์งํ๊ณ ์์ ํจ์ผ๋ก์จ, ์ฝ๋ ํ์ง์ด ํฅ์๋ฉ๋๋ค.
- ๋ฏธ๋ ๋๋น
- React์ ์ต์ ๊ธฐ๋ฅ๊ณผ ๋ฏธ๋ ์ ๋ฐ์ดํธ์ ๋๋นํ ์ ์์ต๋๋ค.
- ํ์
ํจ์จ์ฑ ํฅ์
- ํ์ ๊ฐ์ ์ฝ๋ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ , ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
React.StrictMode ์ฌ์ฉ ์ ์ฃผ์์ฌํญ โ ๏ธ
1. ๊ฐ๋ฐ ํ๊ฒฝ์์๋ง ์ฌ์ฉ
StrictMode๋ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ง ๋์ํฉ๋๋ค. ํ๋ก๋์ ๋น๋์์๋ ๋นํ์ฑํ๋ฉ๋๋ค.
2. ๋ ๋ฒ ๋ ๋๋ง์ผ๋ก ์ธํ ํผ๋
์ปดํฌ๋ํธ๋ฅผ ๋ ๋ฒ ๋ ๋๋งํ๊ธฐ ๋๋ฌธ์, ๋ถํ์ํ ๊ฒฝ๊ณ ๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด๋ ๋ฌธ์ ๋ฅผ ๋ฏธ๋ฆฌ ๋ฐ๊ฒฌํ๊ธฐ ์ํ ์๋์ ์ธ ๋์์ ๋๋ค.
3. ๊ธฐ์กด ์ฝ๋์์ ์ถฉ๋
์ค๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ API๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, StrictMode์์ ํธํ๋์ง ์์ ์ ์์ต๋๋ค.
React.StrictMode ์์ฝ ๐
ํน์ง | ์ค๋ช |
Deprecated ๋ฉ์๋ ๊ฐ์ง | ์ค๋๋ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋ ์ฌ์ฉ ์ ๊ฒฝ๊ณ ๋ฐ์ |
์๋์ ์ธ ๋ ๋ฒ ๋ ๋๋ง | ๋ฌธ์ ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์งํ๊ธฐ ์ํด ์ปดํฌ๋ํธ๋ฅผ ๋ ๋ฒ ๋ ๋๋ง |
findDOMNode ๊ฒฝ๊ณ | findDOMNode ๋์ ref ์ฌ์ฉ ๊ถ์ฅ |
React 18๊ณผ ํธํ์ฑ | ์๋ ๋ฐฐ์น ๋ฐ ๋์์ฑ ๋ชจ๋์ ํจ๊ป ์ ์๋ |
ํ๋ก๋์ ์์ ๋นํ์ฑํ | ๊ฐ๋ฐ ์ค์๋ง ํ์ฑํ๋์ด ์ฑ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์์ |
React.StrictMode๋ ๊ฐ๋ฐ ์ค ๋ฌธ์ ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์งํ๊ณ ๊ณ ํ์ง์ ์ฝ๋๋ฅผ ์์ฑํ๋๋ก ๋๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ์ด๋ฅผ ํ์ฉํด React ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ฌ๋ณด์ธ์!
๐ท์ ์ค์ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ด ์๋น! ๐ท
'Front-end > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] Hooks: ์ด๋ณด๋ถํฐ ์ ๋ฌธ๊ฐ๊น์ง ์๋ฒฝ ์ ๋ณต ๐ช (1) | 2024.12.07 |
---|---|
[React] render() ํจ์ ์๋ฒฝ ๊ฐ์ด๋ โจ (0) | 2024.12.06 |
React์ ref: DOM๊ณผ์ ์ํต์ ์ํ ๋น๋ฐ ํต๋ก โจ (1) | 2024.11.29 |
React์ SyntheticEvent: ๋ค์ดํฐ๋ธ ์ด๋ฒคํธ์์ ์ฐจ์ด์ ๋ถํฐ ์๋ฒฝ ํ์ฉ๊น์ง ๐ (0) | 2024.11.28 |
์ด๋ฒคํธ ํธ๋ค๋ง: ์์๋๋ฉด ์ผ๋น๋ฐฑ! ๐ฏ (1) | 2024.11.27 |