Jieunny์ ๋ธ๋ก๊ทธ
[React] ๋ฆฌ์กํธ์ ๋ผ์ดํ ์ฌ์ดํด ๋ณธ๋ฌธ
๐ก ๋ฆฌ์กํธ์ ๋ผ์ดํ ์ฌ์ดํด
โฐ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์๋ ์๋ช ์ฃผ๊ธฐ๊ฐ ์๋๋ฐ ์ด๋ฅผ ๋ผ์ดํ ์ฌ์ดํด์ด๋ผ๊ณ ํํํ๋ค.
โฐ ์ปดํฌ๋ํธ๋ ์์ฑ(Mounting) -> ์ ๋ฐ์ดํธ(Updating) -> ์ ๊ฑฐ(Unmounting) ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ๋๋ค.
โฐ ๋ฆฌ์กํธ ํด๋์ค ์ปดํฌ๋ํธ๋ ๋ผ์ดํ ์ฌ์ดํด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ , ํจ์ํ ์ปดํฌ๋ํธ๋ ๋ฆฌ์กํธ ํ ์ธ useEffect๋ฅผ ์ฌ์ฉํ๋ค.
๐ก ํด๋์ค ์ปดํฌ๋ํธ์ ๋ผ์ดํ ์ฌ์ดํด ๋ฉ์๋
1. ๋ง์ดํธ
โฐ ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋๋ ์์ ์ ์๋ฏธํ๋ค.
โฐ constructor -> getDerivedStateFromProps -> render -> componentDidMount ์์๋ก ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค.
constructor()
์ปดํฌ๋ํธ ์์ฑ์ ๋ฉ์๋๋ก ์ปดํฌ๋ํธ๊ฐ ๋ง๋ค์ด์ง๋ฉด ๊ฐ์ฅ ๋จผ์ ์คํ๋๋ ๋ฉ์๋
getDerivedStateFromProps()
props๋ก ๋ฐ์์จ ๊ฒ์ state๋ก ๋ฃ์ด์ฃผ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
์ปดํฌ๋ํธ๊ฐ ์ฒ์ ๋ ๋๋ง ๋๊ธฐ ์ ์ ํธ์ถ๋๋ฉฐ ๋ฆฌ๋ ๋๋ง ๋๊ธฐ ์ ์๋ ํญ์ ์คํ๋๋ค. Props๋ State๊ฐ ๋ณ๊ฒฝ๋์์ ๋๋ ํธ์ถ๋๋ค.
render()
์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๋ ๋ฉ์๋
componentDidMount()
์ปดํฌ๋ํธ์ ์ฒซ๋ฒ์งธ ๋ ๋๋ง์ด ๋๋๊ณ ๋๋ฉด ํธ์ถ๋๋ ๋ฉ์๋๋ก, ์ด ๋ฉ์๋๊ฐ ํธ์ถ๋๋ ์์ ์์ ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ์ถ๋ ฅ๋ ์ํ์ด๋ค.
2. ์ ๋ฐ์ดํธ
โฐ ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ ๋๋ ์์ ์ ์๋ฏธํ๋ค.
โฐ getDerivedStateFromProps -> shouldComponentUpdate -> render -> getSnapshotBeforeUpdate -> componentDidUpdate ์์๋ก ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค.
shouldComponentUpdate()
์ปดํฌ๋ํธ์ ๋ฆฌ๋ ๋๋ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๋ฉ์๋๋ก React.memo์ ์ ์ฌํ๋ค.
getSnapshotBeforeUpdate()
render์์ ๋ง๋ค์ด์ง ๊ฒฐ๊ณผ๊ฐ ๋ธ๋ผ์ฐ์ ์ ์ค์ ๋ฐ์๋๊ธฐ ์ง์ ์ ํธ์ถ๋๋ ๋ฉ์๋.
์ปดํฌ๋ํธ์ ๋ณํ๊ฐ ์ผ์ด๋๊ธฐ ์ง์ ์ DOM ์ํ๋ฅผ ๊ฐ์ ธ์์ ํน์ ๊ฐ์ ๋ฐํํ๋ฉด, ๊ทธ ๋ค์ ๋ฐ์ํ๋ componentDidUpdate์์ ๋ฐ์์์ ์ฌ์ฉํ ์ ์๋ค.
componentDidUpdate()
๋ฆฌ๋ ๋๋ง ๋ง์น๊ณ , ํ๋ฉด์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ณํ๊ฐ ๋ชจ๋ ๋ฐ์๋๊ณ ๋ ๋ค์ ํธ์ถ๋๋ ๋ฉ์๋, ์์กด์ฑ ๋ฐฐ์ด์ด ๋ณํ ๋๋ง useEffect๊ฐ ์คํ๋๋ ๊ฒ๊ณผ ๊ฐ๋ค.
3. ์ธ๋ง์ดํธ
โฐ ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง๋ ์์ ์ ์๋ฏธํ๋ค.
โฐ ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง๊ธฐ ์ง์ ์ componentWillUnmout ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค.
componentWillUnmount()
์ฃผ๋ก DOM์ ์ง์ ๋ฑ๋กํ๋ ์ด๋ฒคํธ๋ฅผ ์ ๊ฑฐํ๋ค.
๐ก ํจ์ํ ์ปดํฌ๋ํธ์ ๋ผ์ดํ ์ฌ์ดํด
โฐ useEffect๋ฅผ ์ฌ์ฉํด์ ํด๋์ค ์ปดํฌ๋ํธ์ ๋ผ์ดํ ์ฌ์ดํด๊ณผ ์ ์ฌํ๊ฒ ๊ตฌํํ ์ ์๋ค.
โฐ ํ๋ฉด์ ๋ ๋๋ง์ด ์๋ฃ๋ ํ์ ์ํ๋๋ฉฐ componentDidMount, componentDidUpdate, componentWillUnmout๊ฐ ํฉ์ณ์ง ๊ฒ
// 1. ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๋ ๋ง๋ค ์คํ๋จ.
useEffect(() => {
})
// 2. componentDidMount()
// ๋ ๋๋ง์ด ์๋ฃ๋ ํ ํธ์ถ๋จ => ๋ง์ดํธ ์ดํ 1ํ๋ง ์คํ
useEffect(() => {
}, [])
// 3. componentDidUpdate() & getDerivedStateFromProps()
// ์ปดํฌ๋ํธ ์
๋ฐ์ดํธ ์์
์ด ์๋ฃ๋ ํ ์คํ๋จ => 2๋ฒ์งธ ํ๋ผ๋ฏธํฐ ๋ฐฐ์ด์ ์ ์ด์ค ๋ณ์๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง ์คํ
useEffect(() => {
}, [props, state, ...]}
// 4. componentWillUnmount()
// ์ธ๋ง์ดํธ ๊ด๋ จ ์ฝ๋๋ return ์ฝ๋ฐฑ์ ์์ฑ
useEffect(() => {
return () => {
// unmount ์ฝ๋
}
}, [props, state, ...])
'Study > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ๋ฆฌ๋์ค๋ ๋ฌด์์ผ๊น? (2) | 2023.08.24 |
---|