Mounting
: component๋ฅผ ์ด๊ธฐํํ๊ณ DOM์ ์ฐ๊ฒฐํ ๋constructor(), render()
Updating
: state๊ฐ ๋ฐ๋๊ฑฐ๋ props ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ๊ฒฐ๊ณผ ๋ฐ์ํ ๋Unmounting
: DOM์์ component๊ฐ ์ ๊ฑฐ๋ ๋ํ ๋ฒ unmounting ๋ component๋ re-mount/undate ํ ์ ์๋ค.
class Clock extends React.Component {
constructor(props) {
super(props);
this.state = { date: new Date() };
}
render() {
return <div>{this.state.date.toLocaleTimeString()}</div>
}
};
ReactDOM.render(<Clock />, document.getElementById('app'));
์์ ์ฝ๋์์ Clock component๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์
๋ฐ์ดํธ ํ๋๋ก ๊ธฐ๋ฅ์ ์ถ๊ฐ
ํ๋ค๊ณ ๊ฐ์ ํ์. ์ฐ๋ฆฌ๋ ์ด๋ป๊ฒ ํด์ผํ ๊น? JavaScript์ ์ ์ฉํ setInterval()์ด๋ผ๋ ํจ์
๊ฐ ์๋๋ฐ ๊ทธ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํด์ง ์๊ฐ๋ง๋ค ํ์ฌ์๊ฐ์ด ์
๋ฐ์ดํธ ๋๋ ์๋ก์ด ํจ์๋ฅผ ๋ง๋ค ์ ์๋ค.
const oneSecond = 1000;
setInterval(() => {
this.setState({ date: new Date() });
}, oneSecond);
์ด๋ ๊ฒ โก๋ง๋ค์ด์ง ํจ์๋ Clock component์ ์ด๋์ ์์น
ํ๋ฉด ์ข์๊น?
counstructor() ์์น?
. constructor๋ ์ค์ง mounting์ ์ฑ
์์ ๊ฐ๋๋ฐ ๊ทธ ์์น์ Clock ํจ์๊ฐ ์กด์ฌํ๋ฉด Single Responsibility Principle(๋จ์ผ ์ฑ
์ ์์น)์ ์๋ฐํ๊ฒ ๋๋ฏ๋ก ์ข์ง ์๋ค.
render() ์์น?
. mounting๊ณผ updating cycle ์ค๊ฐ์์ ํธ์ถ๋๋ฏ๋ก ๋๋ฌด ์์ฃผ ์คํ๋๊ณ ๋ฏธ๋ฌํ ๋ฒ๊ทธ(?)๋ฅผ ๋ง๋ค ์ ์๋ ์ํ์์๊ฐ ์์ด์ ์ข์ง ์๋ค.
๊ทธ๋ฌ๋ฉด.... ๋๋์ฒด ์ด๋์ ๋ฃ์ด์ผ ํ๋๊ฑธ๊น? OMG! ๐ฅ
componentDidMount()
๋ mounting ์์ ํธ์ถ๋๋ method๋ก component๊ฐ render ๋๊ณ ๋์ ํธ์ถ
๋๋ค. SRP๋ฅผ ์๋ฐํ์ง ์์ผ๋ฉด์ ๋๋ฌด ์์ฃผ ์คํ๋์ง๋ ์๊ธฐ ๋๋ฌธ์ ํด๋น method๋ฅผ ํ์ฉํ๋ฉด ์์ ์ ์ผ๋ก clock ํจ์๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
โ setState ๋ฑ์ ์ฝ๋๋ก re-rendering์ด ๋ ๋๋ ์คํ๋์ง ์๋๋ค
.
componentDidMount() {
const oneSecond = 1000;
setInterval(() => {
this.setState({ date: new Date() });
}, oneSecond);
}
์ด ๋ ํ๋์ ์ํฉ์ ๊ฐ์ ํด๋ณด์! Clock component๊ฐ unmount ๋ ๋ ์ method๋ ์ธ์ ๊น์ง ๋์ํ๊ฒ ๋๋๊ฑธ๊น..? ๐ ์ผ๋ฐ์ ์ผ๋ก๋ setInterval์ ID๋ฅผ clearInterval์ ์ ๋ฌํ์ฌ setInterval์ clear ํ๋๋ก ํ ์๋ ์์ง๋ง ๊ทธ๊ฒ์ ์กฐ๊ธ์ interval์ ๊ฐ๊ฒ ๋ ๊ฒ์ด๋ค.์ด ๋ clearInterval๊ณผ ๊ฐ์ด ์ฌ์ฉํ์ฌ componentDidMount ๋์์ผ๋ก ์ธํด ์ง์ ๋ถํด์ง ๊ฒ๋ค์ ์ ๋ฆฌํ๋๋ก ํด์ฃผ๋ method
๊ฐ ์๋ค.
const oneSecond = 1000;
this.intervalID = setInterval(() => {
this.setState({ date: new Date() });
}, oneSecond);
// Some time later...๐
clearInterval(this.intervalID);
componentWillUnmount
์ component๊ฐ ์์ ํ ์ ๊ฑฐ๋๊ธฐ ์ง์
, unmount๊ฐ ์คํ๋๊ธฐ ์ง์ ์ ํธ์ถ๋๋ค. ์ฐ๋ฆฌ๊ฐ clock component๋ฅผ ์ ๊ฑฐํ ๋, ์ด method๋ ํธ์ถ๋๋ฉฐ clock's interval์ ์ ๋ฆฌํ๊ฒ ๋๋ค. ์ด๋ฐ ๊ณผ์ ์ component์ unmount ๊ณผ์ ์ ๊น๋ํ๊ฒ ์ ๋ฆฌํด ์ค ๊ฒ์ด๋ค.
componentDidMount() {
const oneSecond = 1000;
this.intervalID = setInterval(() => {
this.setState({ date: new Date() });
}, oneSecond);
}
componentDidUpdate
๋ ์ต์ด rendering์์๋ ๋์ํ์ง ์๋ค๊ฐ ์ต์ด ์ดํ state ํน์ props์ update๊ฐ ์ผ์ด๋๋ฉด ํธ์ถ
๋๋ค. ํด๋น method๋ ์ด์ prevProps์ currProps๋ฅผ ๋น๊ตํ์ฌ DOM์ ์กฐ์ํ ๋ ํ์ฉ
ํ๋ฉด ์ข๋ค. ๋จ, setState()๋ฅผ ํธ์ถ
ํ ๋, ์กฐ๊ฑด๋ฌธ์ผ๋ก ๊ฐ์ธ์ง ์์ผ๋ฉด ๋ฌดํ ๋ฃจํ
์ ๋น ์ง ์ ์๋ค.