๐ Lifecycle Methods in Class Component
๐ React Lifecycle Methods Diagram
์ด๋ฏธ์ง ์ถ์ฒ : React Lifecycle Methods Diagram - github.com/wojtekmaj
๐ Mount์์ ํธ์ถ๋๋ Lifecycle Methods
- ์ปดํฌ๋ํธ์ ์ธ์คํด์ค๊ฐ ์์ฑ๋์ด DOM ์์ ์ฝ์
๋ ๋ ์์๋๋ก ํธ์ถ๋๋ methods
๐ฑ 1. constructor()
constructor(props) {
super(props);
this.state = { counter: 0 };
this.handleClick = this.handleClick.bind(this);
}
- constructor ์์ฑ์๋ก, ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ๋ ์ฒ์์ผ๋ก ์คํ๋๋ ๋ฉ์๋.
- ์ด๊ธฐ state๋ฅผ ์ ํ ์ ์์. (setState ํธ์ถ ์์ด this.state๋ก ์ด๊ธฐ state ๊ฐ ์ง์ )
- ๋ฉ์๋ ๋ฐ์ธ๋ฉ์ด๋ state ์ด๊ธฐํ ์์
์ด ์๋ค๋ฉด ๊ตฌํํ์ง ์์๋ ๋๋ ๋ฉ์๋.
- ๐ก ์ผ๋ฐ์ ์ธ ์ํฉ์์๋ state์ props๋ฅผ ๋ณต์ฌํ์ง ์๋๋ก! props์ ๊ฐฑ์ ์ ์๋์ ์ผ๋ก ๋ฌด์ํ๋ ๊ฒฝ์ฐ์๋ง state์ prop๋ฅผ ๋ณต์ฌํ๋ค.
๐ฑ 2. static getDerivedStateFromProps(props, state)
static getDerivedStateFromProps(nextProps, prevState) {
console.log('getDerivedStateFromProps');
if (nextProps.color !== prevState.color) { // ์กฐ๊ฑด์ ๋ฐ๋ผ
// ํน์ ๊ฐ ๋๊ธฐํํ์ฌ state ๋ณ๊ฒฝ์ด ํ์ํ ๊ฒฝ์ฐ, ์๋ก์ด state return
return { color: nextProps.color };
}
return null; // state ๋ณ๊ฒฝ ํ์๊ฐ ์์ผ๋ฉด null ๋ฐํ
}
- ์ปดํฌ๋ํธ ์ต์ด ๋ง์ดํธ์ ์
๋ฐ์ดํธ ์ ํธ์ถ๋๋ ๋ฉ์๋๋ก, render() ํธ์ถ ์ง์ ์ ํธ์ถ๋จ.
- ์๊ฐ์ ํ๋ฆ์ ๋ฐ๋ผ ๋ณํ๋ props์ state๊ฐ ์์กดํ๋ ๋๋ฌธ ์๋ฅผ ์ํ์ฌ ์กด์ฌ. props๋ก ๋ฐ์์จ ๊ฐ์ state์ ๋๊ธฐํ์ํค๋ ์ฉ๋.
๐ฑ 3. render()
- ํด๋์ค ์ปดํฌ๋ํธ์์ ๋ฐ๋์ ๊ตฌํ๋ผ์ผํ๋ ์ ์ผํ ๋ฉ์๋.
- ์ปดํฌ๋ํธ๋ jsx๋ฅผ ๋ฐํํด์ผํ๋๋ฐ, ํด๋์ค๋ return ๋ฌธ์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก, ํด๋์คํ ์ปดํฌ๋ํธ์์๋ JSX๋ฅผ ๋ฐํํ๊ธฐ ์ํด render() ํจ์๋ฅผ ์ฌ์ฉํ๋ค. ๋ฆฌ์กํธ๋ ํด๋์คํ ์ปดํฌ๋ํธ์ render() ํจ์๋ฅผ ์๋์ผ๋ก ์คํ์ํจ๋ค.
- render() ํจ์๋ ์์ํด์ผํ๋ค. ํธ์ถ๋ ๋๋ง๋ค ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ผ ํ๊ณ , ๋ธ๋ผ์ฐ์ ์ ์ง์ ์ํธ์์ฉ ํ์ง ์๋๋ค. (๋ธ๋ผ์ฐ์ ์ ์ํธ์์ฉํ๋ ์์
์ ๋ค๋ฅธ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋์์ ์ํํ๋ค.)
๐ฑ 4. componentDidMount()
componentDidMount() {
console.log('componentDidMount');
}
- ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ์งํ, ์ฆ ํธ๋ฆฌ์ ์ฝ์
๋์ด ์ฒซ ๋ ๋๋ง์ ๋ค ๋ง์น ์งํ์ ํธ์ถ๋จ.
- ๋คํธ์ํฌ ์์ฒญ์ ๋ณด๋ด๊ณ ๋ฐ์ดํฐ ๊ตฌ๋
์ ์ค์ ํ๊ธฐ ์ข์ ์์น. ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ๋ ์์ํฌ ํจ์๋ฅผ ํธ์ถํ๊ฑฐ๋ ์ด๋ฒคํธ ๋ฑ๋ก, setTimeout, setInterval, ๋คํธ์ํฌ ์์ฒญ ๊ฐ์ ๋น๋๊ธฐ ์์
์ฒ๋ฆฌ ์์น
๐ Update์์ ํธ์ถ๋๋ Lifecycle Methods
- ์ปดํฌ๋ํธ๊ฐ re-rendering ๋ ๋, ์์๋๋ก ํธ์ถ๋๋ methods
๐ฑ 1. static getDerivedStateFromProps()
๐ฑ 2. shouldComponentUpdate(nextProps, nextState)
shouldComponentUpdate(nextProps, nextState) {
console.log('shouldComponentUpdate', nextProps, nextState);
// ์ซ์ ๋ง์ง๋ง ์๋ฆฌ๊ฐ 4๋ฉด ๋ฆฌ๋ ๋๋ง ์ํจ.
return nextState.number % 10 !== 4;
}
- props ๋๋ state๊ฐ ์๋ก์ด ๊ฐ์ผ๋ก ๊ฐฑ์ ๋์ด ๋ ๋๋ง์ด ๋ฐ์ํ๊ธฐ ์ง์ ์ ํธ์ถ๋จ.
- ํ์ฌ state ๋๋ props์ ๋ณํ๊ฐ ์ปดํฌ๋ํธ ์ถ๋ ฅ ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น๋์ง ๋ฆฌ์กํธ์๊ฒ ์๋ ค์ฃผ๊ณ , state ๋๋ props์ ๋ณ๊ฒฝ์ด ์๋ ์ํฉ์์ ๋ฆฌ๋ ๋๋ง์ ํ ์ง ์ง์ ํ๋ ๋ฉ์๋๋ก '์ฑ๋ฅ ์ต์ ํ'๋ฅผ ์ํ ๊ฒ์.
- return์ true or false๋ก default๋ true. false๋ฅผ ๋ฐํํ๋ฉด ์
๋ฐ์ดํธ ๊ณผ์ ์ค์ง.
- ํ์ฌ props์ state๋ this.props, this.state๋ก ์ ๊ทผํ๊ณ ์๋ก ์ค์ ๋ props์ state๋ nextProps, nextState๋ก ์ ๊ทผ.
๐ฑ 3. render()
๐ฑ 4. getSnapshotBeforeUpdate(prevProps, prevState)
getSnapshotBeforeUpdate(prevProps, prevState) {
console.log('getSnapshotBeforeUpdate');
if (prevProps.color !== this.props.color) {
return this.myRef.style.color;
}
return null;
}
- ๊ฐ์ฅ ๋ง์ง๋ง์ผ๋ก ๋ ๋๋ง๋ ๊ฒฐ๊ณผ๊ฐ DOM ๋ฑ์ ๋ฐ์๋์์ ๋, render()์์ ๋ง๋ค์ด์ง ๊ฒฐ๊ณผ๋ฌผ์ด ๋ธ๋ผ์ฐ์ ์ ์ค์ ๋ก ๋ฐ์๋๊ธฐ ์ง์ ์ ํธ์ถ๋จ.
- componentDidUpdate()์ ์ธ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ์ธ snapshot์ผ๋ก ๋ฐํํ๋ ๊ฐ์ด ์ ๋ฌ๋จ.
์ค๋
์ท ๊ฐ์ ๋ฐํํ๊ฑฐ๋ null์ ๋ฐํํ๋ค.
์ฃผ๋ก ์
๋ฐ์ดํธํ๊ธฐ ์ง์ ์ ๊ฐ์ ์ฐธ๊ณ ํ ์ผ์ด ์์ ๋ ํ์ฉ๋๋ค.
๐ฑ 5. componentDidUpdate(prevProps, prevState, snapshot)
getSnapshotBeforeUpdate(prevProps, prevState) {
console.log('getSnapshotBeforeUpdate');
if (prevProps.color !== this.props.color) {
return this.myRef.style.color;
}
return null;
}
- ๊ฐฑ์ , ์
๋ฐ์ดํธ๊ฐ ์ผ์ด๋ ์งํ์ ํธ์ถ๋จ. (๋ฆฌ๋ ๋๋ง์์๋ง ํธ์ถ๋จ)
DOM ์กฐ์์ ์ํด ์ด ๋ฉ์๋๋ฅผ ํ์ฉํ๊ณ ์ด์ ๊ณผ ํ์ฌ props๋ฅผ ๋น๊ตํ์ฌ ๋คํธ์ํฌ ์์ฒญ์ ๋ณด๋ด๋ ์์
๋ ์ด๋ฃจ์ด์ง.
- prevProps์ prevState๋ก ์ปดํฌ๋ํธ๊ฐ ์ด์ ์ ๊ฐ์ก๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์์.
- ์ปดํฌ๋ํธ์์ getSnapshotBeforeUpdate()์ ๊ตฌํํ๋ค๋ฉด, ํด๋น ๋ฉ์๋ ๋ฐํ๊ฐ์ด ์ธ ๋ฒ์งธ "snapshot" ์ธ์๋ก ๋๊ฒจ์ง
๐ Unmount์์ ํธ์ถ๋๋ Lifecycle Methods
- ์ปดํฌ๋ํธ๊ฐ DOM ์์์ ์ ๊ฑฐ๋ ๋์ ํธ์ถ๋๋ method
๐ฑ componentWillUnmount()
- ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ํด์ ๋์ด ์ ๊ฑฐํ๊ธฐ ์ง์ ์ ํธ์ถ๋จ.
componentDidMount() ๋ด์์ ๋ฑ๋กํ ์ด๋ฒคํธ, ํ์ด๋จธ ์ ๊ฑฐ, ๊ตฌ๋
ํด์ , ๋คํธ์ํฌ ์์ฒญ ์ทจ์ ๋ฑ์ ์ ๋ฆฌ ์์
์ํ
References