React Hook?
React ์์ ๊ธฐ์กด์ ์ฌ์ฉํ๋ Class๋ฅผ ์ด์ฉํ ์ฝ๋๋ฅผ ์์ฑํ ํ์ ์์ด,
state์, ์ฌ๋ฌ React ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ปดํฌ๋ํธ์ state(์ํ)๋ฅผ ๊ด๋ฆฌ ํ ์ ์๋ค. React์์ ์ฌ์ฉ์์ ๋ฐ์์ ๋ฐ๋ผ, ํ๋ฉด์ ๋ฐ๊ฟ์ฃผ๊ธฐ(๋ ๋๋ง) ์ํด ์ฌ์ฉ๋๋ ํธ๋ฆฌ๊ฑฐ ์ญํ ์ ํ๋ ๋ณ์์ด๋ค. React๊ฐ state๋ฅผ ๊ฐ์ํ๊ณ , ๋ฐ๋ ์ ๋ณด์ ๋ฐ๋ฅธ ํ๋ฉด์ ํ์ํด์ค๋ค. setValue๋ value์ ๋ฐ๋ ๊ฐ์ ๋ด๋๋ค. useState๋ ์ปดํฌ๋ํธ์์ state๊ฐ์ ์ถ๊ฐํ ๋ ์ฌ์ฉ๋จ. ํจ์ํ ์ปดํฌ๋ํธ์์๋ ํด๋์คํ ์ปดํฌ๋ํธ์ฒ๋ผ state๋ฅผ ์ฌ์ฉํ ์ ์์ด, Hook์ ์ฌ์ฉํด์ state์ ๊ฐ์ ๊ธฐ๋ฅ์ ํ ์ ์๋๋ก ๋ง๋ค์ด์ค๋ค. ํ๋์ useState ํจ์๋ ํ๋์ ์ํ ๊ฐ๋ง ๊ด๋ฆฌ๋ฅผ ํ ์ ์์ด ๋ง์ฝ์ ์ปดํฌ๋ํธ์์ ๊ด๋ฆฌํด์ผํ ์ํ๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด useState๋ฅผ ์ฌ๋ฌ๋ฒ ์ฌ์ฉํด์ผ ํ๋ค.
export default function App(){
const [value1, setValue1] = useState()
const [value2, setValue2] = useState()
return {
<div>
<div>{value1}</div>
<div>{value2}</div>
</div>
}
}
//์์ 2
import React, { useState } from 'react';
function Example() {
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
// ํด๋ฆญ์ count +1
Click me
</button>
</div>
);
}
useEffect() ํจ์๋ React component๊ฐ ๋ ๋๋ง ๋ ๋๋ง๋ค ํน์ ์์ (Sied effect)์ ์คํํ ์ ์๋๋ก ํ๋ ๋ฆฌ์กํธ Hook์ด๋ค. ์ฌ๊ธฐ์ Side effect๋ component๊ฐ ๋ ๋๋ง ๋ ์ดํ์ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ๋์ด์ผ ํ๋ ๋ถ์์ ์ธ ํจ๊ณผ๋ค์ ๋ปํ๋ค.
useEffect(function, deps)
useEffect(() => {
console.log("๋ ๋๋ง ๋ ๋๋ง๋ค ์คํ");
});
useEffect(() => {
console.log("๋งจ ์ฒ์ ๋ ๋๋ง๋ ๋ ํ ๋ฒ๋ง ์คํ");
},[]);
useEffect(() => {
console.log(name);
console.log("name์ด๋ผ๋ ๊ฐ์ด ์
๋ฐ์ดํธ ๋ ๋๋ง ์คํ");
},[name]);
useReducer๋ State(์ํ)๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ๋ฐ์ดํธํ๋ Hook์ธ useState๋ฅผ ๋์ฒดํ ์ ์๋ Hook์ด๋ค. useReducer๋ useState์ฒ๋ผ State๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ๋ฐ์ดํธ ํ ์ ์๋ Hook์ด๋ค. useState์ ๋ค๋ฅธ ์ ์ ํ ์ปดํฌ๋ํธ ๋ด์์ State๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ก์ง ๋ถ๋ถ์ ์ปดํฌ๋ํธ๋ก๋ถํฐ ๋ถ๋ฆฌ์ํค๋ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋ค.
์ฌ๋ฌ ๊ฐ์ Reducer๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, Redux์ combineReducers ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ํ๋์ Reducer๋ก ํฉ์ณ์ค ์ ์๋ค.
import { combineReducers } from 'redux';
const rootReducer = combineReducers({
counterReducer,
anyReducer,
...
});
useReducer ํจ์๋ reducer ํจ์๊ฐ ๋ฐํํ๋ ๊ฐ์ผ๋ก state๋ฅผ ๊ฐฑ์ ํ๋ ์ญํ ์ ํ๋ค.
const [state, dispatch] = useReducer(reducer, initialState, init);