๐ Before start
๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ ํด๋์คํ๊ณผ ํจ์ํ์ด ์๋ค. ๋ฆฌ์กํธ์ ์๋ช ์ฃผ๊ธฐ์ ๋ฐ๋ผ ํน์ ์์ ์ ์ํํ๊ณ ์ถ์ ๋ ํด๋์คํ ์ปดํฌ๋ํธ์์๋ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ , ํจ์ํ ์ปดํฌ๋ํธ์์๋ ๋ฆฌ์กํธ ํ ์ ์ฌ์ฉํ๋ค.
๋ฆฌ์กํธ ์๋ช ์ฃผ๊ธฐ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋, ๊ทธ๋ฆฌ๊ณ ํ ์ ๋ฑ์ฅ ๋ฐฐ๊ฒฝ์ ๋ํด ์์๋ณด์.
๋ชจ๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ ๋ค์๊ณผ ๊ฐ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ๋๋ค.
1. ๋ง์ดํธ(mount) : ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ์ถ๊ฐ๋ ๋
2. ์
๋ฐ์ดํธ(update): props ํน์ state์ด ๋ณ๊ฒฝ๋์ด ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ์๋ก ๊ทธ๋ ค์ง ๋
3. ์ธ๋ง์ดํธ(unmount) : ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์์ ์ ๊ฑฐ๋ ๋
๋ฆฌ์กํธ์์ ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ ๋๋ง(update)๋๋ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค.
1. props ๊ฐ์ด ์
๋ฐ์ดํธ๋ ๋
2. ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ๋
3. state ๋ณ๊ฒฝ์ด ์์ ๋
------------------------
4. ํด๋์ค ์ปดํฌ๋ํธ์์ shouldComponentUpdate()๊ฐ true๋ฅผ ๋ฐํํ ๋
5. ํด๋์ค ์ปดํฌ๋ํธ์์ forceUpdate() ๋ฉ์๋๋ฅผ ์คํํ ๋
๋ฆฌ์กํธ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ ํด๋์คํ ์ปดํฌ๋ํธ์์๋ง ์ฌ์ฉํ ์ ์๋ค. ๋ฆฌ์กํธ ํ ์ ์ดํดํ๋ ๊ฒ์ด ๋ชฉํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๊ฒ๋ง ์์๋ณด๊ณ ๋์ด๊ฐ์.
constructor()
getDerivedStateFromProps()
render()
componentDidMount()
getDerivedStateFromProps()
shouldComponentUpdate()
React.memo
์ ๋น์ทํ ์ญํ ์ ํ๋ค.render()
getSnapshotBeforeUpdate()
ํจ์ํ ์ปดํฌ๋ํธ + ๋ฆฌ์กํธ ํ
์ ์ฌ์ฉํ๋ค๋ฉด ์ด ๋ฉ์๋๋ฅผ ๋์ฒดํ ์ ์๋ ๊ธฐ๋ฅ์ด ์์ง ์๋ค.
DOM์ ๋ณํ๊ฐ ๋ฐ์๋๊ธฐ ์ด์ ์์ฑ์ ์ ๊ทผํ๊ณ ์ถ๋ค๋ฉด ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์์๋์.
componentDidUpdate()
getSnapshotBeforeUpdate()
์์ ๋ฐํํ ๊ฐ์ ์กฐํํ ์ ์๋ค.componentWillUnmount()
๋ฆฌ์กํธ ํ ์ ํจ์ํ ์ปดํฌ๋ํธ์์๋ง ์ฌ์ฉํ ์ ์๋ค. ๋ฆฌ์กํธ ํ ๊ฐ๋ ์ด ํ์ํ๊ฒ๋ ๋ฐฐ๊ฒฝ์ ๋ค์๊ณผ ๊ฐ๋ค.
๐ ์ปดํฌ๋ํธ ๊ฐ ๋ฐ๋ณต๋๋ ์ํ ๋ก์ง์ ์ฌ์ฌ์ฉํ ์ ์์๋ค.
๊ธฐ์กด ํด๋์คํ ์ปดํฌ๋ํธ์์ ์ํ ๋ก์ง์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด์๋ render props๋ ๊ณ ์ฐจ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ค.
์ด๋ฌํ ๋ฐฉ์์ ์ปดํฌ๋ํธ ๊ตฌ์กฐ๋ฅผ ์ฌ๊ตฌ์ฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ๋ฒ๊ฑฐ๋ก์ ๊ณ ,
์ถ์์ ์ธ ๋ ์ด์ด๊ฐ ๊ฒน๊ฒน์ด ์์ฌ ๋ง๋ค์ด์ง wrapper hell์ ํ์ฑํ๊ธฐ๋ ํ๋ค.
โก๏ธ ๋ฆฌ์กํธ ํ ์ ์ฌ์ฉํ๋ฉด, ์ปดํฌ๋ํธ ๊ณ์ธต๊ณผ ๊ตฌ์กฐ ๋ณ๊ฒฝ ์์ด ์ํ ๋ก์ง์ ์ฌ์ฌ์ฉํ ์ ์๋ค.
๐ ๋ณต์กํ ๊ตฌ์กฐ์ ์ปดํฌ๋ํธ์ ์ํ ๋ก์ง์ ์ดํดํ๊ธฐ ํ๋ค์๋ค.
์๋ช
์ฃผ๊ธฐ ๋ฉ์๋๋ ์๋ก ๊ด๊ณ ์๋ ๋ก์ง์ ํจ๊ป ์์ฑํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด,
1. componentDidMount์ componentDidUpdate์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋์ผํ ๋ก์ง์ ์ํํ๋ค.
2. componentDidMount๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ๊ฐ์ด ๋ฐ์ดํฐ ํ์นญ๊ณผ ๊ด๋ จ ์๋ ๋ก์ง์ด ํฌํจ๋ ์ ์๋ค.
3. ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํ๋ ๋ก์ง์ componentWillUnmount์ ๋ค์ด๊ฐ๋ค.
์์ ๊ฐ์ ์ด์ ๋ก ๊ด๋ จ์ฑ ์๋ ๋ก์ง์ ์๋ก ํฉ์ด์ง๊ณ ,
๊ด๋ จ ์๋ ๋ก์ง์ ํ๋๋ก ํฉ์ณ์ง๋ฉฐ ๋ฒ๊ทธ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋ ๋์์ก๋ค.
โก๏ธ ๋ฆฌ์กํธ ํ ์ ์ฌ์ฉํ๋ฉด, ์ด๋ฒคํธ ๋ฆฌ์ค๋ ํน์ ๋ฐ์ดํฐ ํจ์นญ๊ณผ ๊ฐ์ด ์ฐ๊ด์ฑ์๋ ๋ก์ง์ ๋๋ ๋ฌถ์ ์ ์๋ค.
๐ ์ด๋ ค์ด ํด๋์ค ๊ฐ๋
๊ฐ๋ฐ์๋ ๋ฆฌ์กํธ์ props, state, ๋ฐ์ดํฐ ํ๋ฆ์ ์ ์ดํดํ์ง๋ง ํด๋์ค๋ ๊ฐ๋
์ ์ดํดํ๊ธฐ ํ๋ค์ดํ๋ค.
์ฌ์ง์ด ์๋ฐ์คํฌ๋ฆฝํธ this๋ ๋ค๋ฅธ ์ธ์ด์ this์ ๋ค๋ฅธ ๊ฐ๋
์ด๊ธฐ ๋๋ฌธ์, ์๋ จ๋ ๊ฐ๋ฐ์๋ ํด๋์ค ์ปดํฌ๋ํธ๋ ๋ค๋ฃจ๊ธฐ ๊น๋ค๋ก์ ๋ค.
โก๏ธ ๋ฆฌ์กํธ ํ ์ ์ฌ์ฉํ๋ฉด, ๋ฆฌ์กํธ ์์ฒด์ ๊ธฐ๋ฅ์ ์ง์คํด ๊ฐ๋ฐํ ์ ์๋ค.