์๋ ํด๋์ค ์ปดํฌ๋ํธ์ ํจ์ ์ปดํฌ๋ํธ๋ ๊ฐ์ ๋์์ ํ๋ค.
ํด๋์ค ์ปดํฌ๋ํธ๋ก, 5์ด๋ง๋ค count๊ฐ 1์ด ์ฆ๊ฐํ๋๋ก ๋ง๋ค์๋ค.
// React ์ปดํฌ๋ํธ class๋ฅผ ์ ์ํ๋ ค๋ฉด, React.Component๋ฅผ ์์ ๋ฐ์์ผํ๋ค.
class Count extends React.Component {
constructor(props) {
super(props); // ๋ถ๋ชจ์ props
this.state = { count: 0 }; // state ์ด๊ธฐ๊ฐ ์ง์
}
increase() {
this.setState({ // ์ด๊ธฐ๊ฐ ๋ณ๊ฒฝ
count: this.state.count + 1,
});
}
// ์ปดํฌ๋ํธ์ ์ถ๋ ฅ๋ฌผ์ด DOM์ ๋ ๋๋ง ๋ ํ์ ํ๋ฒ๋ง ์คํ
componentDidMount() {
console.log("mount");
this.timeIncrease = setInterval(() => this.increase(), 5000);
}
// ์ปดํฌ๋ํธ์ ์
๋ฐ์ดํธ๋ง๋ค ํธ์ถ. ์ต์ด ๋ ๋๋ง ๋๋ ํธ์ถ๋์ง ์์
componentDidUpdate() {
console.log("update");
console.log(this.state.count);
}
// ์ปดํฌ๋ํธ๊ฐ ์ ๊ฑฐ๋๊ธฐ ์ง์ ์ ํ๋ฒ๋ง ์คํ
componentWillUnmount() {
console.log("unmount");
clearInterval(this.timeIncrease);
}
// React.Component์ ํ์ class์์๋
// ๋ฐ๋์ render๋ฉ์๋๋ฅผ ์ ์ํด์ผ ํ๋ค.
render() {
return (
<>
<h1>Hello world!</h1>
<h2>Count: {this.state.count}</h2>
</>
);
}
}
ํจ์ ์ปดํฌ๋ํธ๋ก, 5์ด๋ง๋ค count๊ฐ 1์ด ์ฆ๊ฐํ๋๋ก ๋ง๋ค์๋ค.
const CountFunction = () => {
const [count, setCount] = useState(0);
const increase = () => {
setCount((count) => count + 1);
};
useEffect(() => {
console.log("mount");
const timeIncrease = setInterval(increase, 5000);
// ๊นจ๋ํ๊ฒ ์ ๋ฆฌํด์ผ ํ๋ ์ฝ๋๋ return๋ฉ์๋ ์์ ์์ฑํ๋ฉด ๋๋ค.
return () => {
console.log("unmount");
clearInterval(timeIncrease);
};
}, []);
// ์ด๋ ๊ฒ ๊ธฐ๋ฅ์ ๋ง๊ฒ useEffect๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค.
useEffect(() => {
console.log("update");
console.log(count);
}, [count]);
return (
<>
<h1>Hello world!</h1>
<h2>Count: {count}</h2>
</>
);
};
๐ ์ง๊ธ ๋ฐ๋ก (๊ณต์๋ฌธ์)React.Component ๋ณด๋ฌ๊ฐ๊ธฐ
๐ lifecycle diagram ๋ผ์ดํ์ฌ์ดํด ๋ค์ด์ด๊ทธ๋จ ๋ณด๋ฌ๊ฐ๊ธฐ