์ปค์คํ Hooks ๋ง๋ค๊ธฐ
→ ๋ฐ๋ณต๋๋ ๋ก์ง์ ์ฝ๊ฒ ์ฌ์ฌ์ฉ
- ์ปค์คํ Hooks๋ฅผ ๋ง๋ค ๋์๋ use๋ผ๋ ํค์๋๋ก ์์ํ๋ ํ์ผ์ ๋ง๋ค๊ณ , ๊ทธ ์์ ํจ์๋ฅผ ์์ฑ
- ๋ง๋๋ ๋ฐฉ๋ฒ: useState, useEffect, useReducer, useCallback ๋ฑ Hooks๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ๊ธฐ๋ฅ ๊ตฌํํ๊ณ , ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฐ๋ค ๋ฐํ
- ์ปดํฌ๋ํธ์ ๋ก์ง์ ๋ถ๋ฆฌ์์ผ ํ์ํ ๋ ์ฝ๊ฒ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ
ex) input ๊ด๋ฆฌํ๋ ์ฝ๋ ์ปค์คํ Hook ๋ง๋ค๊ธฐ
import { useState, useCallback } from "react";
function useInputs(initialForm) {
const [form, setForm] = useState(initialForm);
//change
const onChange = useCallback((e) => {
const { name, value } = e.target;
setForm((form) => ({ ...form, [name]: value }));
}, []);
const reset = useCallback(() => setForm(initialForm), [initialForm]);
return [form, onChange, reset];
}
export default useInputs;
//App.js
const [{ username, email }, onChange, reset] = useInputs({
usename: "",
email: "",
});
const onCreate = useCallback(() => {
dispatch({
type: "CREATE_USER",
user: {
id: nextId.current,
username,
email,
},
});
reset();
nextId.current += 1;
}, [username, email, reset]);
const onToggle = useCallback((id) => {
dispatch({
type: "TOGGLE_USER",
id,
});
}, []);
const onRemove = useCallback((id) => {
dispatch({
type: "REMOVE_USER",
id,
});
}, []);
- useReducer์์ ์ฌ์ฉํ๋ inputs ์์ ๊ณ useInputs๋ก ๋์ฒด
- ์๋ก์ด ํญ๋ชฉ ์ถ๊ฐ ํ ๋ input ๊ฐ ์ด๊ธฐํ → ๋ฐ์ดํฐ ๋ฑ๋ก ํ reset() ํธ์ถ
'ํ๋ก ํธ์๋ > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Immer (0) | 2022.11.24 |
|---|---|
| Context API (0) | 2022.11.24 |
| useReducer (0) | 2022.11.24 |
| useCallback, React.memo (0) | 2022.11.24 |
| useEffect์ useMemo (0) | 2022.11.23 |