๐ Hook ์ด๋?
React ์์ ๊ธฐ์กด์ ์ฌ์ฉํ๋ Class๋ฅผ ์ด์ฉํ ์ฝ๋๋ฅผ ์์ฑํ ํ์ ์์ด,
state์, ์ฌ๋ฌ React ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๊ณ ํ ์ ์๋ค.
๐ Hook์ ํน์ง
- ํจ์ ์ปดํฌ๋ํธ๋ ํด๋์ค ์ปดํฌ๋ํธ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.
- ํจ์ ์ปดํฌ๋ํธ๋ ํด๋์ค ์ปดํฌ๋ํธ์ ๋ค๋ฅด๊ฒ, ๋ชจ๋๋ก ํ์ฉํ๊ธฐ๊ฐ ์ฌ์ฐ๋ฏ๋ก
์๋ก์ ์ฅ์ ์ ์ ๋ถ๋ค ๊ฐ์ง๊ณ ์๋ค - ์ ํ์ ์ฌ์ฉ : ๊ธฐ์กด์ ์ฝ๋๋ฅผ ๋ค์ ์์ฑํ ํ์ ์์ด, ์ผ๋ถ์ ์ปดํฌ๋ํธ๋ค์์์ Hook์ ์ฌ์ฉํ ์ ์๋ค. ํ์ง๋ง ๋น์ฅ Hook์ด ํ์ํ์ง ์๋ค๋ฉด ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
- 100% ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ : Hook์ ํธํ์ฑ์ ๊นจ๋จ๋ฆฌ๋ ๋ณํ๊ฐ ์๋ค.
- Hook์ ์๊ณ ์๋ React ์ปจ์ ์ ๋์ฒดํ์ง ์์ : ๋์ , Hook์ prop, state, context, refs, lifecycle๊ณผ ๊ฐ์ React ๊ฐ๋ ์ ์ข ๋ ์ง๊ด์ ์ธ API๋ฅผ ์ ๊ณตํ๋ค.
- Hook์ ํตํด์ ์๋ก ๋น์ทํ ๊ฒ์ ํ๋ ์์ ํจ์์ ๋ฌถ์์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋๋๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค. (๊ตฌ๋ ์ค์ ๋ฐ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ๊ณผ ๊ฐ์ ๋ก์ง) ๋, ์ด๋ฌํ ๋ก์ง์ ์ถ์ ์ ์ฝ๊ฒ ํ ์ ์๋๋ก Reducer๋ฅผ ํ์ฉํ์ฌ ์ปดํฌ๋ํธ์ ์ง์ญ์ํ ๊ฐ์ ๊ด๋ฆฌํ๋๋ก ํ ์ ์๋ค.
๐ React : Hooks
ํจ์ํ ์ปดํฌ๋ํธ์์ Hook์ ์ฌ์ฉ
- ํ์ดํ ํจ์
const Test = (props) => { //์ด ์๋ฆฌ์ Hook์ ์ฌ์ฉํ ์ ์๋ค. return <div />; }
- ์ผ๋ฐ ํจ์
function Test(props){ //์ด ์๋ฆฌ์ Hook์ ์ฌ์ฉํ ์ ์๋ค. return <div /> }
๐ ํจ์ํ ์ปดํฌ๋ํธ๋ State๊ฐ ์๋ ์ปดํฌ๋ํธ์ง๋ง, Hook์ด State๋ฅผ ํจ์ ์์์ ์ฌ์ฉํ ์ ์๋๋ก ํด์ค๋ค.
๐ Hook์ Class ์์์๋ ์ฌ์ฉํ ์ ์๋ค.
๐ State๋?
state๋ฅผ ์ง์ญํ๋ฉด ์ํ๋ฅผ ์๋ฏธํ๋๋ฐ, ๊ทธ ๋ป ๊ทธ๋๋ก ์ปดํฌ๋ํธ์ UI์ ๋ณด๋ฅผ ๋งํ๋ค. state๋ ์ปดํฌ๋ํธ ๋ด์์ ์ ์ํ๊ณ ์ฌ์ฉํ๋ฉฐ ์ผ๋ง๋ ์ง ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ์ ์๋ค.
๐ State : Function component
import React, { useState } from 'react';
function State() {
const [color, setColor] = useState('red');
return (
<div>
<h1>What is State?</h1>
</div>
);
}
export default State;
- ํจ์ ์ปดํฌ๋ํธ์์ ํ๋ฉด์ ๋ํ๋ด๊ณ ์ถ์ JSX์์๊ฐ return๋ฌธ ์์ ๋ค์ด์๋ ๊ฒ์ ์ ์ ์์ผ๋ฉฐ,
state๋ฅผ ์ค์ ํ ๋๋ ํ๋ฉด์์ ๋ณด์ฌ์ง๋ฏ์ด useStateํจ์๋ฅผ importํ ํ์ ์ฌ์ฉํด์ผํ๋ค. - useState ํจ์๋ ์ปดํฌ๋ํธ ์ ์ธ๋ฌธ
function State()
๊ณผreturn
์ฌ์ด์ ์์ฑํ๋ค.
useStateํจ์์ ์ด๊ธฐ๊ฐ ('red')์ ์ธ์๋ก ๋ฃ์ด ํธ์ถํ๋ฉด ๋ฐฐ์ด์ ๋ฐํํ๋ค. ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ์์๋ ์ํ๊ฐ์ด ์ ์ฅ๋๋ ๋ณ์์ด๊ณ , ๋๋ฒ์งธ ์์๋ ์ํ ๊ฐ์ ๊ฐฑ์ ํ๋ ํจ์๋ก, state๋ฅผ ๋ด๋ ๋ณ์๋ฅผ color๋ก ์ง์ ํ๊ณ color๊ฐ์ ๊ฐฑ์ ํ๋ ํจ์๋ฅผ setColor๋ก ๊ทธ๋ฆฌ๊ณ color์ ์ด๊ธฐ ๊ฐ์ red๋ก ์ ์ํ๋ค.
๐ฉ๐ซ State ์ฌ์ฉ์์
state์์ ์ํ๊ฐ์ ์ค์ ํ๋ ์ด๋ด๋ ๊ฒฐ๊ตญ ์ปดํฌ๋ํธ ์์ ์์์์ ๊ทธ ์ํ ๊ฐ์ ๋ฐ์ํด์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ ๋ ๋ง๋ค ํจ์จ์ ์ผ๋ก ํ๋ฉด์ ๋ํ๋ด๊ธฐ ์ํจ์ด๋ค.
<h1 style={{ color: color }}>Function Component | State</h1>
// key๊ฐ color๋ ์์์ ๋ถ์ฌํ๊ธฐ ์ํ ์์ฑ
// value ๊ฐ color๋ useState ํจ์๋ฅผ ํตํด ์ด๊ธฐ๊ฐ์ธ 'red'๋ฅผ ๋ด๊ณ ์๋ ๋ณ์
return๋ฌธ์์ h1ํ์ดํ ์์๊ฐ ์๋๋ฐ, ํด๋น์์์ ๊ธ์์์ ์ปดํฌ๋ํธ์์ ์ค์ ํ state๊ฐ์ผ๋ก ํ๊ณ ์ถ์ ๊ฒฝ์ฐ, ์์ ์ฝ๋์ ๊ฐ์ด state๋ฅผ ๋ด๋ ๋ณ์, color๋ผ๋ ๋ณ์๋ฅผ color ์์ฑ์ value๋ก ์ง์ ํด ์ค๋ค.
๐ฉ๐ซ Event & state ๋ณ๊ฒฝ
import React, { useState } from 'react';
function State() {
const [color, setColor] = useState('red');
return (
<div>
<h1 style={{ color: color }}>Function Component | State</h1>
<button onClick={() => setColor('blue')}>Click</button>
</div>
);
}
export default State;
๐ useState
๐ State()
import React, { useState } from 'react';
function Test(){
const [age, setAge] = useState(50);
const [fruit, setFruit] = useState('apple');
const [todos, setTodos] = useState({text: 'How to use Hooks'});
}
๐ React.Component
class Test extends React.Component{
constructor(props){
super(props);
this.state = {
age : 50,
fruit : 'apple',
todos : {text: 'How to use Hooks'},
}
}
}
๋ ๊ฐ์ ์ฝ๋๋ ๋์ผํ ์ฝ๋๋ผ๊ณ ๋ณผ ์ ์๋ค. ๋ ์ฝ๋ ๋ชจ๋ state์์ age, fruit, todos๋ผ๋ ๋ณ์๊ฐ ์๊ฒผ๋ค. ๋ค๋ฅธ ์ ์ state๋ฅผ ๋ฐ๊พธ๋ ํจ์์ด๋ฉฐ, ๊ธฐ์กด ์ฝ๋๊ฐ์ ๊ฒฝ์ฐ๋ this.setState() ๋ฅผ ํตํด์ ๋ฐ๊ฟ์ฃผ์์ง๋ง useState()๊ฐ์ ๊ฒฝ์ฐ๋ setState()์ ์ด๋ฆ์ ๋ณ๊ฒฝํ ์ ์๋ค.
๐ useState()
const [state๋ช
, setState๋ช
] = useState(์ด๊ธฐ๊ฐ)
React.Component state ์์ ๋ณ์๊ฐ ์ฌ๋ฌ๊ฐ ์์ ๋ this.setState์ ๋ค์ด๊ฐ์ this.state.age ์ด๋ฐ์์ผ๋ก ์ ๊ทผ์ ํด์ผํ๋๋ฐ useState๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ์๋น ํ๋์ setState๊ฐ ์๊ธฐ ๋๋ฌธ์ ํจ์ฌ ํธํ๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
๐ Class Component
<button onClick={() => this.setState({count: this.state.count + 1})}>
Click me
</button>
๐ Function Component
<button onClick={()=> this.setCount(count + 1)}>
Click me
</button>
-> class๋ state๊ฐ์ด ๋ง์ผ๋ฉด ๋ง์ ์๋ก ๋ณต์กํ๊ณ ํท๊น๋ฆด ์ ์๋๋ฐ, fuction์ ๋ณ์๋ง๋ค ํจ์๊ฐ ์ง์ ๋์ด ์์ด์ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
๐ useEffect
๐ React Component์ componentDidMount์ componentDidUpdate์ ๋์ผํ ๋์์ ํ๋ค. ํ์ง๋ง ReactComponent์์๋ Side Effect ํจ์ํ ์ปดํฌ๋ํธ ์์์๋ ํ์ฉ๋์ง ์๋๋ค.
Side Effect : ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฑฐ๋, ๊ตฌ๋ ํ๊ธฐ, DOM์ ์ง์ ์กฐ์ํด์ฃผ๋ ํ์
useEffect Hook์ ํจ์๋ฅผ ์ ๋ฌํ์ฌ ๋ ๋๋ง ์๋ฃ ํ, ์ํ ๋ ์ ์๋๋ก ํ๋ค.
componentDidMount์ componentDidUpdate์๋ ๋ค๋ฅด๊ฒ useEffect๋ก ์ ๋ฌ๋ ํจ์๋ ์ง์ฐ ์ด๋ฒคํธ ๋์์ ๋ ์ด์์ ๋ฒ ์น์ ๋ ๋๋ง์ ์๋ฃํ ํ ์คํ๋๋ค.
'DEV' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Design : UI ์ปดํฌ๋ํธ ์ข ๋ฅ ๋ฐ ํน์ง (3) | 2024.10.20 |
---|---|
Map Method ์ดํดํ๊ธฐ (0) | 2024.10.20 |
React : SPA & SCSS (1) | 2024.10.20 |
React (0) | 2024.10.20 |
Database (2) | 2024.10.20 |