Custom Hooks

inside_6_·2024년 3월 14일

React_Hooks

목록 보기
9/10
post-thumbnail

개요

// 필요한 훅을 커스텀으로 만들어서 활용합니다.

필요한 기능을 만들어 훅으로 활용할 수 있다. 주로 여러 컴포넌트에 사용되거나 반복되는 코드들을 하나로 만들어 사용한다.


활용예제_useInput

// UsingCustomHook.js

function displayMessage(message) {
  alert(message);
}

function UsingCustomHook() {

  const [inputValue, handleChange, handleSubmit] = useInput("", displayMessage);
  // ===> [state, state를 업데이트, 전달된 state를 displayMessage함수로 처리.]
  const [inputValue2, handleChange2, handleSubmit2] = useInput(
    "123",
    displayMessage
  );
  const [inputValue3, handleChange3, handleSubmit3] = useInput(
    "456",
    displayMessage
  );

  return (
    <div>
      <h1>useInput</h1>
      <br />
      <input value={inputValue} onChange={handleChange} />
      <input value={inputValue2} onChange={handleChange2} />
      <input value={inputValue3} onChange={handleChange3} />
      <br />
      <button onClick={handleSubmit}>확인</button>
      <button onClick={handleSubmit2}>확인2</button>
      <button onClick={handleSubmit3}>확인3</button>
    </div>
  );
}

export default UsingCustomHook;

// useInput.js ---> 커스텀 훅이 될 컴포넌트

export function useInput(initialValue, submitAction) {
  const [inputValue, setInputValue] = useState(initialValue); // 매개변수를 초기값으로 설정

  const handleChange = (e) => {
    setInputValue(e.target.value);
  };

  const handleSubmit = () => {
    setInputValue("");
    submitAction(inputValue);
  };
  // ---> 전달되고 나면 state를 초기화 하고 매개변수 submitAction으로 그 값을 다룬다.

  return [inputValue, handleChange, handleSubmit];
  // ---> [state, state를 업데이트, state를 전달]
}

위 예제는 useInput이라는 커스텀 훅을 만들어 다른 컴포넌트에서 활용하는 예제이다.
확인을 누를 때 마다 input의 value를 alert해주는 방법이다.

state가 될 초기값을 설정해주는 inputValue를 생성하고 그 state를 업데이트 해주는 setInputValue를 활용하여 handleChange함수를 만들어 주었다.
그리고 그 값을 전달하기 위한 매개변수로 받은 submitAction을 handleSubmit을 만들어 주었다.

그리고 만들어진 state와 함수들을 배열로 return해주었다.

return된 값을 UsingCustomHook.js에서
상수배열로 처리한다.

useInput.js
--->
function useInput (초기값, 값을 처리하는 함수) {
// ...
}
return [ state, state를 업데이트, state를 전달 ]

UsingCustomHook.js
--->
const [ state, state를 업데이트, state를 전달 ]
= useInput(초기값, 값을 처리하는 함수)

이런식으로 짝지어서 생각하면 편하다.


활용예제_useFetch

// CustomHookUseFetch.js

const baseUrl = "https://jsonplaceholder.typicode.com";

function CustomHookUseFetch() {

  const { data: userData } = useFetch(baseUrl, "users");
  // ===> userData는 fatch를 통해 값을 받아오기 전에는 null이다.
  const { data: postData } = useFetch(baseUrl, "posts");
  // ===> postData도 마찬가지로 fatch를 통해 값을 받아오기 전에는 null이다.

  return (
    <div>
      <h1>useFetch</h1>
      <br />
      <h2>User</h2>
      {userData && <pre>{JSON.stringify(userData[0], null, 2)}</pre>}
      <h2>Post</h2>
      {postData && <pre>{JSON.stringify(postData[0], null, 2)}</pre>}
    </div>
  );
}

export default CustomHookUseFetch;

// useFetch.js

export function useFetch(baseUrl, initialType) {
  const [data, setData] = useState(null);

  const fetchUrl = (type) => {
    fetch(baseUrl + "/" + type)
      .then((res) => res.json())
      .then((res) => setData(res));
  };

  useEffect(() => {
    fetchUrl(initialType);
  }, []);

  return {
    data,
    fetchUrl,
  };
}

위 예제는 useFetch이라는 커스텀 훅을 만들어 다른 컴포넌트에서 활용하는 예제이다.
베이스가 되는 Url을 baseUrl을 지정하고 그 사이트에 해당하는 페이지들의 주소들을 받아와서 화면에 출력해준다.

상수 fetchUrl을 만들어 baseUrl을 토대로 해당페이지에 접근할 수 있게 해준다.

useFetch.js
--->
function useFetch ( 기준이 되는 Url, 초기값(접근할 페이지 주소) ) {
const 페이지에 접근할 수 있게 해주는 함수 = () => {}

// ...
}
return { state, 페이지에 접근할 수 있게 해주는 함수 }

CustomHookUseFetch.js
--->
const { state : 변수명 }
= useFetch(baseUrl, "초기값(접근할 페이지 주소)")

이런식으로 짝지어서 생각하면 편하다.


적용점

javascript와 React에 익숙해진다면 정말 요긴하게 사용될 듯하다. 그리고 학습하면서 javascript의 함수 관련해서 매개변수나 데이터가 파싱되는 것에 대해 좀 더 명확하게 알게됨과 동시에 javascript공부를 더 면밀히 해야겠단 생각이 들었다.


참조

profile
한다. 프론트엔드.

0개의 댓글