React Study

React - custom hook

eddie0329 2020. 12. 13. 23:23
๋ฐ˜์‘ํ˜•

๋ชฉ์ฐจ

  • Introduction
  • custom hook
  • Conclusion

๐Ÿ“Œ Introduction

์•ˆ๋…•ํ•˜์„ธ์š”. ์˜ค๋Š˜์€ custom hook์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. custom hook์€ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” react hooks๋ฅผ ๋ฌถ์–ด์„œ dryํ•จ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ํ•œ๋ฒˆ ์•Œ์•„๋ณผ๊นŒ์š”?

๐Ÿ“Œ custom hook

import { useReducer, useCallback } from "react";

const CHANGE_FORM = "CHANGE_FORM";
const RESET_FORM = "RESET_FORM";

function reducer(state, action) {
  switch (action.type) {
    case CHANGE_FORM:
      return {
        ...state,
        [action.name]: action.value,
      };
    case RESET_FORM:
      return {
        ...action.initialForm,
      };
    default:
      return state;
  }
}

function useInputs(initialForm) {
  const [form, dispatch] = useReducer(reducer, initialForm);

  const onChange = useCallback((e) => {
    const { name, value } = e.target;
    dispatch({ type: CHANGE_FORM, name, value });
  }, []);

  const reset = useCallback(() => dispatch({ type: RESET_FORM, initialForm }), [
    initialForm,
  ]);

  return [form, onChange, reset];
}

export default useInputs;

์ด๋ ‡๊ฒŒ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” inputs์— ๋Œ€ํ•ด์„œ custom hooks๋ฅผ ๋งŒ๋“ค์–ด ์ค„์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด์ œ useInputs๋Š” ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 const [form, onChange, reset] = useInputs({
    username: "",
    email: "",
  });

custom hooks๋ฅผ ์‚ฌ์šฉํ• ๋•Œ๋Š” ์•ž์— use๋ฅผ ๋ถ™์—ฌ hooks์ธ ๊ฒƒ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

๐Ÿ“Œ Conclusion

์ด๋ ‡๊ฒŒ ์˜ค๋Š˜ custom hook์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์™œ vue3์—์„œ hook์— ์˜๊ฐ์„ ๋งŽ์ด ๋ฐ›์•˜๋‹ค๊ณ  ํ–ˆ๋Š”์ง€ ์•Œ๊ฒ ๋„ค์š”. ์ข€๋” dryํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์œ ์ง€๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ๋„ˆ๋ฌด ํฌ๊ฒŒ ๋‹ค๊ฐ€์˜ค๋„ค์š”. ๊ทธ๋Ÿผ ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๋ด์š” ์•ˆ๋…•~

๋ฐ˜์‘ํ˜•