Hook์ ํญ์ use๋ผ๋ ํค์๋๋ก ์์ํฉ๋๋ค.(use~๋ฅผ hook์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.(useState, useEffect))
Hook์ ํจ์ ์ปดํฌ๋ํธ์์ React state์ ์๋ช ์ฃผ๊ธฐ ๊ธฐ๋ฅ(lifecycle features)์ โ์ฐ๋(hook into)โํ ์ ์๊ฒ ํด์ฃผ๋ ํจ์์ ๋๋ค.
Hook์ ํจ์ ์ปดํฌ๋ํธ์์ state๋ฅผ ๊ฐ๊ฒ ํด์ฃผ๋ ํจ์์
๋๋ค.
ํ
์ ํจ์ํ ์ปดํฌ๋ํธ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ ์ฌ์ฉํ๋ ํจ์์
๋๋ค. ํ
์ ์ด์ฉํ๋ฉด ํจ์ํ ์ปดํฌ๋ํธ์ ์ํฏ๊ฐ์ ์ฌ์ฉํ ์ ์๊ณ , ์์ ์์์ ์ ๊ทผํ ์๋ ์์ต๋๋ค.
๋ฆฌ์กํธ ์๋ช
์ฃผ๊ธฐ๋ฅผ ํจ์ํ component์์๋ ์ฌ์ฉ์ ๋ชปํ์์ต๋๋ค. ๊ทธ๋์ ํจ์ํ ์ปดํฌ๋ํธ๊ฐ ๋ ๊ฐ๊ฒฐํ๊ณ ๋น ๋ฅด๋๋ผ๋ ํด๋์คํ ์ปดํฌ๋ํธ๋ฅผ ์จ์์ต๋๋ค.
React 16.8 Hooks ์
๋ฐ์ดํธ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค.
Hook ๋ฑ์ฅ ์ด์ : Class componet์ ๋จ์ ๋ณด์(๊ธด ์ฝ๋, ๋ณต์กํจ), ์ฌ์ฌ์ฉ์ฑ ๊ฐํ๋ฅผ ์ํด
(3๋จ๊ณ)
์ปดํฌ๋ํธ ํ๋ฉด์ ์ฒซ ๋ ๋๋ง(mount)-state์กฐ์ ๋ฑ ์
๋ฐ์ดํธ(update)-ํ๋ฉด์์ ์ฌ๋ผ์ง ๋(unmount)
- ๋ง์ดํธ๋ DOM์ด ์์ฑ๋๊ณ ์น ๋ธ๋ผ์ฐ์ ์์์ ๋ํ๋๋ ๊ฒ์ ๋ปํ๊ณ , ๋ฐ๋๋ก ์ธ๋ง์ดํธ๋ DOM์์ ์ ๊ฑฐ๋๋ ๊ฒ์ ๋ปํ๋ค.
- ์ฃผ์ํ์ฌ ๋ณผ ๊ฒ์ ์ ๋ฐ์ดํธ ๋ถ๋ถ์ธ๋ฐ, ์ ๋ฐ์ดํธ๋ ๋ค์๊ณผ ๊ฐ์ 4๊ฐ์ง ์ํฉ์์ ๋ฐ์ํ๋ค.
props๊ฐ ๋ฐ๋ ๋
state๊ฐ ๋ฐ๋ ๋
๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๋
this.forceUpdate๋ก ๊ฐ์ ๋ก ๋ ๋๋ง์ ํธ๋ฆฌ๊ฑฐํ ๋
useState: ์ํ๊ฐ์ ๊ด๋ฆฌํ๋ ํ
. useState ํ
์ ์ด์ฉํ๋ฉด ์ปดํฌ๋ํธ์ ์ํฏ๊ฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
useState ํ
์ด ๋ฐํํ๋ ๋ฐฐ์ด์ ๋ ๋ฒ์งธ ์์๋ ์คํ
์ดํธ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์์
๋๋ค.
const App = () => {
const [count, setCount] = useState(0); //์ด๊ธฐ์ํ
return (
<>
{count}
<button onClick={() => setCount(count + 1)}>Increment</button>
</>
);
};
class ์ปดํฌ๋ํธ
class Example extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0
};
}
render() {
return (
<div>
<p>You clicked {this.state.count} times</p>
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
Click me
</button>
</div>
);
}
}
https://ko.reactjs.org/docs/hooks-state.html
useEffect: ๋ฆฌ์กํธ์๊ฒ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ์ดํ์ ์ด๋ค ์ผ์ ์ํํด์ผํ๋ ์ง๋ฅผ ๋งํ๋ค. ๋ฆฌ์กํธ๋ ์ฐ๋ฆฌ๊ฐ ๋๊ธด ํจ์๋ฅผ ๊ธฐ์ตํ๋ค๊ฐ( ์ด ํจ์๋ฅผ 'effect') DOM ์ ๋ฐ์ดํธ๋ฅผ ์ํํ ์ดํ์ ๋ถ๋ฌ๋ธ ๊ฒ์ ๋๋ค. useEffect ์์ ์๋ ์ฝ๋๋ html ๋ ๋๋ง ํ์ ๋์ํฉ๋๋ค.(for๋ฌธ i<1000000์ผ๋ ์ ์ฉ, ์ด๋ ค์ด ์ฐ์ฐ, ์๋ฒ์์ ๋ฐ์ดํฐ๊ฐ์ ธ์ค๋ ์์ , ํ์ด๋จธ ์ฅ์ฐฉ)
(1) ๋ ๋๋ง ๋ ๋ ๋ง๋ค ์คํ
useEffect ( () => {
console.log("hi");//์์
mount,update์ ์ฝ๋ ์คํ
});
(2) ๋ ๋๋ง ๋ ๋ ๋ง๋ค ์คํ
useEffect ( () => {
console.log("hi");//์์
mount์ ์ฝ๋ 1ํ๋ง ์คํ
},[]);
(3) ํ๋ฉด์ ์ฒซ ๋ ๋๋ง ๋ ๋ ์คํ(์๋ก๊ณ ์นจ), value๊ฐ์ด ๋ฐ๋ ๋ ์คํ
useEffect ( () => {
console.log("hi");//์์
},[value]); //๋๋ฒ์งธ ์ธ์์ธ ๋ฐฐ์ด์ dependency array๋ผ๊ณ ํจ. state๊ฐ์ ๋ฃ์ด์ค, state๊ฐ ๋ณํ๋ ๋ ๋ง๋ค ์์
์ด ์คํ๋ฉ๋๋ค.
(4)
cont Timer = (props) => {
useEffect(() => {
const timer = setInterval(() => {
console.log('ํ์ด๋จธ ๋์๊ฐ๋์ค...');
}, 1000);
return () => { //๋ณ๋ช
: clean up function. unmount์ ์คํ๋จ(์ปดํฌ๋ํธ ์ญ์ ๋์์)
clearInterval(timer);
console.log('ํ์ด๋จธ๊ฐ ์ข
๋ฃ๋์์ต๋๋ค.');
};
}, []);
return (
<div>
<span>ํ์ด๋จธ๋ฅผ ์์ํฉ๋๋ค. ์ฝ์์ ๋ณด์ธ์!</span>
</div>
);
};
์ปค์คํ
ํ
๋ง๋ค๊ธฐ(ํ
๋ค์ด ๋ฐ๋ณตํ ๊ฒฝ์ฐ)
use{Name}