kohigowild
REACT ์ปดํฌ๋ํธ ์๋ช ์ฃผ๊ธฐ (Life Cycle) ๋ณธ๋ฌธ
๐ฝ ์ปดํฌ๋ํธ ์๋ช ์ฃผ๊ธฐ (Life Cycle)
๋ฆฌ์กํธ์ ์ปดํฌ๋ํธ๋ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ฐ๋๋ค. ์๋ช
์ฃผ๊ธฐ๋ ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋๊ณ , ์ฌ์ฉ๋๊ณ , ์๋ฉธ๋๋ ์ผ๋ จ์ ๊ณผ์ ์ ๋ปํ๊ณ , ์๋ช
์ฃผ๊ธฐ ์์์๋ ํน์ ์์ ์ ์๋์ผ๋ก ํธ์ถ๋๋ ๋ฉ์๋๊ฐ ์๋๋ฐ, ์ด๋ฅผ ๋ผ์ดํ ์ฌ์ดํด ์ด๋ฒคํธ๋ผ๊ณ ํ๋ค.
์ด๋ค ๋ผ์ดํ ์ฌ์ดํด ์ด๋ฒคํธ๋ ํ ๋ฒ๋ง ์คํ๋๊ณ , ์ด๋ค ์ด๋ฒคํธ๋ ๊ณ์ํด์ ์คํ๋๊ธฐ๋ ํ๋ค. ๋ผ์ดํ ์ฌ์ดํด ๋ฉ์๋๋ ํด๋์ค ์ปดํฌ๋ํธ์์๋ง ์ฌ์ฉํ ์ ์๋ค.
๐ฝ ๋ผ์ดํ ์ฌ์ดํด ์ด๋ฒคํธ์ ๋ถ๋ฅ
๋ผ์ดํ ์ฌ์ดํด ๋ฉ์๋์ ์ข ๋ฅ๋ ์ด 9๊ฐ์ง์ด๋ค.
- will ์ ๋์ฌ๊ฐ ๋ถ์ ๋ฉ์๋: ์ด๋ค ์์ ์ ์๋ํ๊ธฐ ์ ์คํ
- did ์ ๋์ฌ๊ฐ ๋ถ์ ๋ฉ์๋: ์ด๋ค ์์ ์ ์๋ํ ํ์ ์คํ
๋ผ์ดํ ์ฌ์ดํด์ 3๊ฐ์ง Mount, Update, Unmount ์นดํ ๊ณ ๋ฆฌ๋ก ๋๋๋ค. ๊ฐ ๋ถ๋ฅ์ ๋ฐ๋ผ ์ด๋ฒคํธ๊ฐ ๋ฐ์๋๋ ํ์๊ฐ ๋ค๋ฅด๋ค.
Mount
DOM์ด ์์ฑ๋๊ณ ์น ๋ธ๋ผ์ฐ์ ์์ ๋ํ๋๋ ๊ฒ์ Mount๋ผ๊ณ ํ๋ค. ํ ๋ฒ๋ง ์คํ๋๋ค.
- constructor: ์ปดํฌ๋ํธ๋ฅผ ์๋ก ๋ง๋ค ๋๋ง๋ค ํธ์ถ๋๋ ํด๋์ค ์์ฑ์ ๋ฉ์๋
- getDerivedStateFromProps: props์ ์๋ ๊ฐ์ state์ ๋ฃ์ ๋ ์ฌ์ฉํ๋ ๋ฉ์๋
- componentWillMount(): DOM์ ์ฝ์ ํ๊ธฐ ์ ์ ์คํ๋๋ค. ๋ง์ดํ ์ค์ด๋ฏ๋ก props๋ state์ ์ ๊ทผํ ์๋ ์์ผ๋ ์ด ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ์ ๋๋ค. ๋ํ ์์ง render() ํจ์๊ฐ ์คํ ์ ์ด๊ธฐ ๋๋ฌธ์ DOM์ ์ ๊ทผํ ์ ์๋ค.
- render: ์ค๋นํ UI ๋ ๋๋ง
- componentDidMount(): DOM์ ์ฝ์ ๋์ด ๋ ๋๋ง์ด ์๋ฃ๋ ํ ์คํ๋๋ค. DOM์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์ฃผ๋ก ์ด ๋จ๊ณ์์ AJAX ์์ฒญ์ ํ๊ฑฐ๋ setTimeout, setInterval ๊ฐ์ ์์ ์ ์คํํ๋ค.
Update
์์ฑ์ด๋ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ด React ์๋ฆฌ๋จผํธ๋ฅผ ์ ๋ฐ์ดํธํ ๋ ๋ฐ์ํ๋ค.
- componentWillReceiveProps(nextProps): ์ปดํฌ๋ํธ๊ฐ props๋ฅผ ๋ฐ๊ธฐ ์ง์ ์คํ๋๋ค. ๋ฐ๋ props์ ๋ํ ์ ๋ณด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๊ฐ๋๋ค.
- shouldComponentUpdate(nextProps, nextState): ์ปดํฌ๋ํธ ์ ๋ฐ์ดํธ ์ง์ ์ ํธ์ถ๋๋ ๋ฉ์๋๋ก, ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง์ ํด์ผํ ์ง ๋ง์์ผํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ค. true๋ฅผ ๋ฐํํ๋ฉด ๋ค์ ๋ผ์ดํ ์ฌ์ดํด ๋ฉ์๋๋ฅผ ๊ณ์ ์คํํ๊ณ , false๋ฅผ ๋ฐํํ๋ฉด ์์ ์ ์ค์ง(๋ฆฌ๋ ๋๋ง X)ํ๋ค.
- componentWillUpdate(nextProps, nextState): ์ปดํฌ๋ํธ ๋ณํ๋ฅผ DOM์ ๋ฐ์ํ๊ธฐ ๋ฐ๋ก ์ง์ ์ ํธ์ถํ๋ค. ์ด ๋จ๊ณ์์ state๋ฅผ ๋ณ๊ฒฝํด์๋ ์ ๋๋ค. (๋ฌดํ ๋ฃจํ ๋ฐ์)
- componentDidUpdate: ์ปดํฌ๋ํธ ์ ๋ฐ์ดํธ ์์ ์ด ๋ค ๋๋ ํ ํธ์ถํ๋ค. ์ด ๋จ๊ณ์์๋ render๊ฐ ์๋ฃ๋์์ผ๋ฏ๋ก DOM์ ์ ๊ทผํ ์ ์๋ค.
Unmount
React ์๋ฆฌ๋จผํธ๋ฅผ DOM์์ ์ ๊ฑฐํ ๋ ๋ฐ์ํ๋ฉฐ ํ ๋ฒ๋ง ์คํ๋๋ค.
- componentWillUnmount(): ์ปดํฌ๋ํธ๋ฅผ DOM์์ ์ ๊ฑฐํ๊ธฐ ์ ์ ์คํ๋๋ฉฐ, ์ฃผ๋ก ์ฐ๊ฒฐํ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํ๋ ๋ฑ์ ์ฌ๋ฌ ์ ๋ฆฌ ์์ ์ ํ๋ค.
๐ฝ ์๋ช ์ฃผ๊ธฐ ์ด๋ฒคํธ ์์ ์ฝ๋
const root = ReactDOM.createRoot(document.getElementById('root'));
function tick() {
const element = (
<div>
<h1>Hello, world!</h1>
<h2>It is {new Date().toLocaleTimeString()}.</h2>
</div>
);
root.render(element);
}
setInterval(tick, 1000);
tick ์ปดํฌ๋ํธ๋ ์๊ฐ์ด ๋ณํ๋ ๊ฒ์ 1000ms๋ง๋ค ์ ๋ฐ์ดํธํ๋ ๊ธฐ๋ฅ์ ์ํํ๋ค. ๋ค์ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์ฝ๋๋ฅผ ์์ ํ๋ค.
- ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ์บก์ํ
- ์ปดํฌ๋ํธ ์ค์ค๋ก ํ์ด๋จธ ์ค์ ํ๊ณ ์ ๋ฐ์ดํธ
componentDidMount() {
this.timerID = setInterval(
() => this.tick(),
1000
);
}
componentWillUnmount() {
clearInterval(this.timerID);
}
tick()์ด ์ฒ์ DOM์ ๋ ๋๋ง ๋ ๋๋ง๋ค ํ์ด๋จธ๋ฅผ ์ค์ ํ๊ณ , ๋ tick()์ ์ํด ์์ฑ๋ DOM์ด ์ญ์ ๋ ๋๋ง๋ค ํ์ด๋จธ๋ฅผ ํด์ ํ๊ธฐ ์ํด componentDidMount() ๋ฉ์๋์ componentWillUnmount() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = {date: new Date()};
}
componentDidMount() {
this.timerID = setInterval(
() => this.tick(),
1000
);
}
componentWillUnmount() {
clearInterval(this.timerID);
}
tick() {
this.setState({
date: new Date()
});
}
render() {
return (
<div>
<h1>Hello, world!</h1>
<h2>It is {this.state.date.toLocaleTimeString()}.</h2>
</div>
);
}
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Clock />);
๐ฝ Reference
https://ko.reactjs.org/docs/state-and-lifecycle.html
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Ref์ ํ์ฉ๊ณผ useRef (0) | 2023.01.02 |
---|---|
[React] props์ state (0) | 2022.12.15 |
React :: COIN TRACKER (0) | 2022.11.29 |
React๋ก ๊ฐ๋จํ To-Do-List ๊ตฌํ (0) | 2022.11.24 |
React useState(), useEffect() (0) | 2022.11.15 |