๐ React์ ์ปดํฌ๋ํธ ๋ผ์ดํ์ฌ์ดํด์ ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋๊ณ ์ ๋ฐ์ดํธ๋๋ฉฐ ์ ๊ฑฐ๋๋ ๊ณผ์ ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ ์ดํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. React ์ปดํฌ๋ํธ์ ๋ผ์ดํ์ฌ์ดํด์ ์ธ ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๋ก ๋๋ ์ ์๋ค.
constructor
: ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋ ๋ ๊ฐ์ฅ ๋จผ์ ์คํ๋๋ ๋ฉ์๋์ด๋ค. ์ด๊ธฐ ์ํ๋ฅผ ์ค์ ํ๊ฑฐ๋ ๋ค๋ฅธ ์ด๊ธฐ ์ค์ ์์
์ ์ํํ๋ค.
getDerivedStateFromProps
: props๊ฐ ๋ณ๊ฒฝ๋ ๋ ํธ์ถ๋๋ค. ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝ๋ props๋ฅผ ๊ธฐ๋ฐ์ผ๋ก state๋ฅผ ์
๋ฐ์ดํธ ํ ์ ์๋ค.
render
: ์ปดํฌ๋ํธ๋ฅผ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ๋ฉ์๋์ด๋ค. ์ด ๋ฉ์๋๋ ๋ฐ๋์ ๊ตฌํ๋์ด์ผ ํ๋ค.
componentDidMount
: ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ์ฒ์์ผ๋ก ๋๋๋ง๋ ํ ํธ์ถ๋๋ค. ์ฃผ๋ก ์ด๊ธฐ ๋ฐ์ดํฐ์ ๋ก๋ฉ, ์ธ๋ถ API ํธ์ถ, ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฑ์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
getDerivedStateFromProps
: ๋ง์ดํธ ๋จ๊ณ์ ๋ง์ฐฌ๊ฐ์ง๋ก props ๋ณ๊ฒฝ ์ ํธ์ถ๋๋ฉฐ, ์ํ๋ฅผ ์
๋ฐ์ดํธ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค.
shouldComponentUpdate
: ์ปดํฌ๋ํธ๊ฐ ์
๋ฐ์ดํธ๋ฅผ ์งํํด์ผ ํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฝ์ ํ๋ ๋ฉ์๋์ด๋ค. ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํด ์ฌ์ฉ๋๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก true๋ฅผ ๋ฐํํ๋ค.
render
: ์
๋ฐ์ดํธ๋ฅผ ์ํํ๊ณ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋๋๋งํ๋ค.
getSnapshotBeforeUpdate
: ์ค์ DOM ์
๋ฐ์ดํธ ์ ์ ํธ์ถ๋๋ฉฐ ์ฃผ๋ก ์ด์ ์ํ์ ํ์ฌ ์ํ๋ฅผ ๋น๊ตํ์ฌ ์คํฌ๋กค ์์น ๋ฑ์ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
componentWillUnmount
: ์ปดํฌ๋ํธ๊ฐ ์ ๊ฑฐ๋๊ธฐ ์ ์ ํธ์ถ๋๋ค. ์ฃผ๋ก ์ด๋ฒคํธ ๋ฆฌ์ค๋ ํด์ , ํ์ด๋จธ ์ ๊ฑฐ ๋ฑ ๋ฆฌ์์ค ํด์ ์์
์ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.๐ ํํธ, ํจ์ํ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ React Hook์ ์ฌ์ฉํ๋ฉด ์ํ(state) ๊ด๋ฆฌ์ ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ๋ฅผ ํ ์ ์๋ค. ์ํ์ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํ ์ ์๋ ๋ํ์ ์ธ Hook์ผ๋ก๋
useState
์useEffect
๊ฐ ์๋ค.
useState
: ํจ์ํ ์ปดํฌ๋ํธ์์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ํ์ฌ ์ํ์ ์ํ๋ฅผ ์
๋ฐ์ดํธํ๋ ํจ์๋ฅผ ๋ฐํํ๋ค.
import React, { useState } from 'react';
function MyComponent() {
const [count, setCount] = useState(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increase</button>
</div>
);
}
useEffect
: ํจ์ํ ์ปดํฌ๋ํธ์ ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ์ ๋น๋๊ธฐ ์์
์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ค. useEffect๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋, ์
๋ฐ์ดํธ๋ ๋, ์ธ๋ง์ดํธ๋ ๋ ํน์ ๋์์ ์ํํ ์ ์๋ค.
์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋ ํ ์คํ๋๋ ๋ก์ง์ ํ ์ ์ฝ๋ฐฑ ํจ์ ๋ด๋ถ์ ์์ฑํ๋ค.
useEffect(() => {
// ๋ง์ดํธ ์ ์คํ๋๋ ์ฝ๋
}, []);
ํน์ ์ํ ๋๋ props๊ฐ ๋ณ๊ฒฝ๋ ๋ ์คํ๋๋ ๋ก์ง์ ํ ์ ๋๋ฒ์งธ ๋งค๊ฐ๋ณ์์ธ ์์กด์ฑ ๋ฐฐ์ด์ ์์ฑํ๋ค.
useEffect(() => {
// ํน์ ์ํ ๋๋ props๊ฐ ๋ณ๊ฒฝ๋ ๋ ์คํ๋๋ ์ฝ๋
}, [dependency]);
์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋ ๋ ์คํ๋๋ ๋ก์ง์ ํ ์ ์ฝ๋ฐฑ ํจ์์์ ๋ฐํํ๋ ํจ์๋ก ์์ฑํ๋ค. ์ด๋ cleanup ํจ์๋ผ ์นญํ๋ค.
useEffect(() => {
return () => {
// ์ธ๋ง์ดํธ ์ ์คํ๋๋ ์ฝ๋
};
}, []);
๐ ์ด์ฒ๋ผ ํจ์ํ ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ React Hook์ ์ฌ์ฉํ๋ฉด ์ํ์ ๋ผ์ดํ์ฌ์ดํด์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค. ์ด๋ก ์ธํด ์ฝ๋๋ ๊ฐ๊ฒฐํด์ง๊ณ ์ดํดํ๊ธฐ ์ฌ์์ง๋ฉฐ ์ฑ๋ฅ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํฌ ์ ์๋ค.