ํ”„๋ก ํŠธ์—”๋“œ/React

์ปค์Šคํ…€ Hooks ๋งŒ๋“ค๊ธฐ

alswlfl 2022. 11. 24. 15:49

์ปค์Šคํ…€ 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() ํ˜ธ์ถœ