[FE / REACT] 커스텀 훅 (Custom Hook)

2023. 12. 10. 18:41· FE/React
목차
  1. 커스텀 훅 (Custom Hook)

커스텀 훅 (Custom Hook)

 

이름이 use로 시작하는 자바 스크립트 함수로 서로 다른 두 개이상의 자바스크립트 함수에서 같은 로직을 공유할 때 해당 로직을 재사용 하기 위해 작성한다

커스텀 훅을 사용하면 코드의 중복을 줄이고 컴포넌트의 재사용성과 유지보수성을 높일 수 있다.

 

https://ko.legacy.reactjs.org/docs/hooks-custom.html

 

자신만의 Hook 만들기 – React

A JavaScript library for building user interfaces

ko.legacy.reactjs.org

React 공식 홈페이지에서도 설명하는 커스텀훅

 

프로젝트를 진행하면서 코드 Rectoring을 진행하면서

API호출 코드를 비지니스 로직을 분리하기 위해

커스텀 훅으로 따로 빼주었다.

또한, 처음 페이지에 진입할 때 최상위로 스크롤 해주는 훅도 따로 빼줌으로써 불필요한 코드 중복을 줄이고

재사용성을 높일 수 있었다.

 

import accommodationAPI from 'apis/accommodationAPI';
import React, { useEffect, useState } from 'react'
import { useNavigate } from 'react-router-dom';
import { PlaceDetailInfo } from 'types/Place';

export default function useGetAccommodationDetailInfo(accommodationdId : string | undefined) {

    const [isLoading, setIsLoading] = useState(true);
    const [accommodationInfo, setAccommodationInfo] = useState<PlaceDetailInfo>();

    const navigate = useNavigate();


    useEffect(() => {
        const getAccommodationDetail = async () => {
            if (accommodationdId !== undefined) {
                setIsLoading(true);
                try {
                    const id = +accommodationdId;
                    const response = await accommodationAPI.getPlaceDetail(id);
                    setAccommodationInfo(response.data.data);
                } catch (error) {
                    console.error('Failed to load accommodation details:', error);
                    navigate('/404', { replace: true });
    
                    }
                    
                setIsLoading(false);
            }
        };
        
        getAccommodationDetail();
    },[accommodationdId]);

  return [isLoading, accommodationInfo];
}

 

다음과 같이 커스텀 훅을 생성해주고

 

	const [isLoading, accommodationInfo] = useGetAccommodationDetailInfo(accommodationdId) as [boolean, PlaceDetailInfo];

 

이런식으로 불러주면 된다!

 

생각보다 만드는 방법이 간단하고

비지니스 로직을 분리해 코드의 목적을 보다 분명하게 처리할 수 있었다

'FE > React' 카테고리의 다른 글

[FE / REACT] Zod  (0) 2024.01.10
[FE / REACT] react-hook-form  (0) 2024.01.09
[FE / REACT] React에서 Kakao Map API 연동하기  (1) 2023.12.07
[FE / REACT] Redux vs Recoil  (0) 2023.10.24
[FE / REACT] key props  (0) 2023.10.19
  1. 커스텀 훅 (Custom Hook)
'FE/React' 카테고리의 다른 글
  • [FE / REACT] Zod
  • [FE / REACT] react-hook-form
  • [FE / REACT] React에서 Kakao Map API 연동하기
  • [FE / REACT] Redux vs Recoil
따봉치치
따봉치치
따봉치치
김치치의개발블로그
따봉치치
전체
오늘
어제
  • 분류 전체보기 (359)
    • 면접질문 (4)
    • CS (50)
    • FE (116)
      • Javascipt (16)
      • Typescipt (6)
      • React (16)
      • CSS (5)
      • Nextjs (1)
      • 리뷰 (70)
    • Algorithm (181)
    • ETC (3)
      • Bootcamp (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • dp
  • javascript
  • C++
  • Stack
  • CS
  • 그리디
  • 스택
  • 탐욕 알고리즘
  • 자료구조
  • 그래프 탐색
  • BOJ
  • 자바스크립트
  • 투 포인터
  • 알고리즘
  • Fe
  • 완전탐색
  • 모던 자바스크립트 딥다이브
  • 백준
  • BFS
  • 우선순위 큐
  • react
  • 리액트
  • TOPCIT
  • Greedy
  • 데이터베이스
  • 백트래킹
  • typescript
  • 모던 리액트 딥다이브
  • 누적합
  • 문자열

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
따봉치치
[FE / REACT] 커스텀 훅 (Custom Hook)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.