[javascript] 리액트 라우터의 브라우저 히스토리 이벤트 처리

리액트 라우터는 싱글 페이지 애플리케이션(SPA)을 위한 라우팅 솔루션으로 인기가 많습니다. 브라우저 히스토리는 사용자가 뒤로가기 또는 앞으로 가기 버튼을 클릭했을 때 발생하는 이벤트를 의미합니다. 이번 포스트에서는 리액트 라우터에서 브라우저 히스토리 이벤트를 처리하는 방법에 대해 알아보겠습니다.

useHistory 훅 사용하기

리액트 라우터 v5부터 도입된 useHistory 훅을 사용하면 브라우저 히스토리 이벤트를 간편하게 처리할 수 있습니다. 이 훅은 현재 브라우저 히스토리에 대한 접근이 가능하며, 위치 변화에 따라 애플리케이션을 업데이트하는 데 사용할 수 있습니다.

import { useHistory } from 'react-router-dom';

const MyComponent = () => {
  const history = useHistory();

  const handlePopState = () => {
    // 뒤로가기 또는 앞으로 가기 버튼 클릭 시 실행될 코드를 작성합니다.
    console.log('히스토리 변경');

    // 다른 작업 수행 가능
  };

  useEffect(() => {
    // 브라우저 히스토리 이벤트 등록
    window.addEventListener('popstate', handlePopState);

    // 컴포넌트 언마운트 시 이벤트 리스너 해제
    return () => {
      window.removeEventListener('popstate', handlePopState);
    };
  }, []);

  return (
    // 컴포넌트 JSX 코드 작성
  );
};

위 예제에서는 useEffect 훅을 사용하여 컴포넌트가 마운트될 때 popstate 이벤트 리스너를 등록하고, 컴포넌트가 언마운트될 때 이벤트 리스너를 해제합니다. handlePopState 함수는 뒤로가기 또는 앞으로 가기 버튼을 클릭했을 때 실행되는 콜백 함수입니다.

라우터 컴포넌트의 업데이트 후 처리하기

때로는 라우터 경로가 변경될 때마다 추가적인 작업을 수행해야 할 때도 있습니다. 예를 들어, 특정 페이지에서 스크롤 위치를 초기화하거나, 초기 상태를 설정하는 등의 작업입니다. 이러한 경우 useEffect 훅을 사용하여 라우터 경로가 변경될 때마다 작업을 수행할 수 있습니다.

import { useEffect } from 'react';
import { useLocation } from 'react-router-dom';

const MyComponent = () => {
  const location = useLocation();

  useEffect(() => {
    // 라우터 경로가 변경될 때마다 실행될 코드를 작성합니다.
    console.log('라우터 경로 변경:', location.pathname);

    // 다른 작업 수행 가능
  }, [location]);

  return (
    // 컴포넌트 JSX 코드 작성
  );
};

위 예제에서는 useLocation 훅을 사용하여 현재 경로 정보를 가져옵니다. useEffect 훅의 의존성 배열에 location을 넣어 라우터 경로가 변경될 때마다 효과적으로 작업을 수행할 수 있습니다.

마무리

리액트 라우터를 사용하면 브라우저 히스토리 이벤트를 쉽게 처리할 수 있습니다. useHistory 훅을 사용하여 히스토리 변경 이벤트를 감지하거나, useLocation 훅을 사용하여 라우터 경로가 변경될 때 추가 작업을 수행할 수 있습니다. 이를 통해 더욱 유연하고 사용자 친화적인 웹 애플리케이션을 구현할 수 있습니다.

참고 자료: