React - Custom Hook

박요셉·2024년 5월 21일
1

React

목록 보기
6/15

예시로 간단하게 정리해놓고 넘어가게쑴

// src/App.jsx

import React from "react";
import { useState } from "react";

const App = () => {
	// input의 갯수가 늘어날때마다 state와 handler가 같이 증가한다.
  const [title, setTitle] = useState("");
  const onChangeTitleHandler = (e) => {
    setTitle(e.target.value);
  };

	// input의 갯수가 늘어날때마다 state와 handler가 같이 증가한다.
  const [body, setBody] = useState("");
  const onChangeBodyHandler = (e) => {
    setBody(e.target.value);
  };

  return (
    <div>
      <input
        type="text"
        name="title"
        value={title}
        onChange={onChangeTitleHandler}
      />
      <input
        type="text"
        name="title"
        value={body}
        onChange={onChangeBodyHandler}
      />
    </div>
  );
};

export default App;

input의 개수가 증가하면 useState와 이벤트 핸들러도 같이 한 뭉텅이씩 새로 생길 것이고 그로 인해 코드의 중복이 생길 것이다.

리액트는 위 예시처럼 반복되는 로직이나 중복되는 코드를 커스텀 훅을 통해서 관리할 수 있다.
리액트에서 제공하는 useState, useEffect와 같은 내장 훅을 사용해서 본인만의 훅을 만드는 것

Input을 위한 value와 onChange 함수를 리턴해주는 커스텀 훅을 하나 작성해주었음.
아래는 useInput 커스텀 훅 코드이다.

// src/hooks/useInput.js

import React, { useState } from "react";

const useInput = () => {
	// 2. value는 useState로 관리하고, 
  const [value, setValue] = useState("");

	// 3. 핸들러 로직도 구현합니다.
  const handler = (e) => {
    setValue(e.target.value);
  };

	// 1. 이 훅은 [ ] 을 반환하는데, 첫번째는 value, 두번째는 핸들러를 반환합니다.
  return [value, handler];
};

export default useInput;

대충 보면 알겠지만 사용하는 것도 아래 첨부하겠음.

// src/App.jsx

import React from "react";
import useInput from "./hooks/useInput";

const App = () => {
	// 우리가 만든 훅을 마치 원래 있던 훅인것마냥 사용해봅니다. 
  const [title, onChangeTitleHandler] = useInput();
  const [body, onChangeBodyHandler] = useInput();

  return (
    <div>
      <input
        type="text"
        name="title"
        value={title}
        onChange={onChangeTitleHandler}
      />

      <input
        type="text"
        name="title"
        value={body}
        onChange={onChangeBodyHandler}
      />
    </div>
  );
};

export default App;

기능은 커스텀 훅을 만들기 전과 동일하게 작동하되, 중복된 코드가 사라지고 전체적인 양 또한 줄어들었다.
앞으로 여러 기능을 구현하며 중복되는 로직이 있을 때는, 어떻게 이를 훅으로 뺄 수 있을지에 대해 생각하는 습관을 가지는 것이 중요하다.

profile
개발자 지망생

0개의 댓글