React Hooks๋ React 16.8 ๋ฒ์ ๋ถํฐ ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ผ๋ก, ํด๋์ค ์ปดํฌ๋ํธ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ์์ ์ ํ๋ ๊ธฐ์กด ๋ฐฉ์์์ ๋ฒ์ด๋ ํจ์ํ ์ปดํฌ๋ํธ์์๋ ๋ ์ง๊ด์ ์ธ ํจ์๋ฅผ ์ด์ฉํ์ฌ ์์ ํ ์ ์๊ฒ ๋ง๋ ๊ธฐ๋ฅ์ด๋ค.
๋ฐ์ด๋ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ง๊ด์ฑ์ ๊ฐ๋ ํจ์ํ ์ปดํฌ๋ํธ์ Hook์ ์ฌ์ฉ๋ฅ ์ด ๋งค์ฐ ๋์ ํธ์ด๋ค.
ํจ์ ์ปดํฌ๋ํธ ์ด์ ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก, ๋ณต์กํด์ง ์๋ก ์ดํดํ๊ธฐ ์ด๋ ต๊ณ , state ๋ก์ง์ ์ฌ์ฌ์ฉํ๊ธฐ ์ด๋ ต๋ค๋ ๋จ์ ์ด ์๋ค.
์ด๋ฌํ ๋ฌธ์ ๋๋ฌธ์ ์ ์ง์ ์ผ๋ก ํจ์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ๋์ด๊ฐ๊ฒ ๋์์ผ๋, ํจ์ ์ปดํฌ๋ํธ๋ state๊ฐ์ ์ฌ์ฉํ๊ฑฐ๋ ์ต์ ํํ ์ ์๋ ๊ธฐ๋ฅ๋ค์ด class ์ปดํฌ๋ํธ์ ๋นํด ๋ฏธ์งํ๊ธฐ ๋๋ฌธ์ ์ด ๋ถ๋ถ์ ๋ํ ๋ณด์์ ์ํด Hook์ด ๋์ ๋์๋ค.
Class Component -> Function Component -> Function Component + Hook
์๋๋ <Counter />
์ปดํฌ๋ํธ๋ฅผ Class๋ก ์์ฑํ ์ฝ๋๋ก, ๋จ์ํ ์นด์ดํ
์ ํ๋ ๊ธฐ๋ฅ๋ง ๊ตฌํ๋์ด์๋ค.
class ClassCount extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0
};
}
render() {
return (
<div>
<p>count: {this.state.count} per times clicked</p>
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
Click this button
</button>
</div>
);
}
}
์๋๋ Class Component ์์ ์ฝ๋์ ๊ฐ์ ๋์์ ํ๋ฉฐ,<counter />
์ปดํฌ๋ํธ๋ฅผ ํจ์ํ ์ปดํฌ๋ํธ๋ก ์์ฑํ ์ฝ๋์ด๋ค.
Class Component์ ๋น๊ตํ์ ๋, ์๋์ ์ผ๋ก ์ง๊ด์ ์ด๊ณ ๋ณด๊ธฐ ์ฝ๋ค.
const FunctionalCount = () => {
const [count, setCount] = React.useState(0);
return (
<div>
<p>count: {count}</p>
<button onClick={() => setCount(count + 1)}>Click this button</button>
</div>
);
};
useState()
๋ผ๋ ์ํ๊ฐ์ ์ ์ฅํ๊ณ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ State Hook์ ํธ์ถํด, ํจ์ ์ปดํฌ๋ํธ์์ state๋ฅผ ์ถ๊ฐํ ํํ์ด๋ค.
์ด๋ฌํ State Hook์ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋๋๋ผ๋ state๋ ๊ทธ๋๋ก ์ ์ง๋๋ค.
ํจ์ํ ์ปดํฌ๋ํธ์์ state ๊ฐ ๋ฐ ๋ค๋ฅธ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ํธํ๊ฒ ํด์ฃผ๋ ๋ฉ์๋๋ก, function์ผ๋ก๋ง React๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๊ธฐ ๋๋ฌธ์ Class Component์์๋ ๋์ํ์ง ์๋๋ค.
๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ, ์ค์ฒฉ๋ ํจ์ ๋ด์์ ์คํ ์, ๋์ํ์ง ์๋๋ค.
์ค์ง React Function Componet๋ Custom Hook์์๋ง ํธ์ถ ๊ฐ๋ฅํ๋ค.(์ผ๋ฐ JavaScript ํจ์xx)
Reference:
์ฝ๋์คํ ์ด์ธ
https://www.xenonstack.com/blog/functional-vs-class-components