프론트엔드/React
React에서 페이지 전환 시 <a> 태그 사용하지 않는 이유 + 페이지 전환 방법
bread-gee
2023. 11. 27. 21:39
Next.js 강의 중 라우팅 챕터를 보는데...
Next.js에서 <a> 태그를 이용해서 <Navigation />을 만들었더니
<a> 태그를 이용해서 페이지를 이동하지 말라고 ESLint가 떴다.
React에서 <a> 태그를 이용해 페이지 이동하지 않는 이유와 같다고 했다.
생각해 보니 정확한 이유를 모르고 있었다.
막연하게 react-router-dom을 이용해서 <Link /> 컴포넌트를 이용해 페이지 이동을 구현했었다.
창피했다.
제대로 쓰기 위해 열심히 찾아보았다.
⭐️ 페이지 전환 시 <a> 태그를 사용하지 않는 이유는?
- 페이지 전환의 SPA 장점 상실
React로 만들어진 앱은 주로 SPA 방식으로 개발되었다. 브라우저의 페이지 전환없이 동적으로 콘텐츠를 보여준다.
<a> 태그를 사용하면 전체 페이지가 새로고침되므로 SPA 장점 사라진다. - React Router 기능 사용 불가
React Router를 이용하면 브라우저 히스토리 관리, 코드 분할, 라우팅 등의 기능을 사용할 수 있다.
<a> 태그를 이용하면 이런 기능 사용할 수 없다. - 컴포넌트 상태 관리 문제
React는 컴포넌트 기반 라이브러리이며, 컴포넌트 간의 상태를 효과적으로 관리할 수 있다. <a> 태그를 이용하면 React의 상태 관리 능력 활용하지 못 한다.
- 페이지 전환에 따른 새로고침
- <a> 태그를 사용하면 페이지가 새로고침되기 때문에 컴포넌트의 상태가 초기화된다.
- 현재 컴포넌트의 상태가 유지되지 않고 다시 렌더링된다.
- 페이지 새로고침되면 기존의 상태가 손실되므로 항상 페이지 다시 렌더링된다. - 컴포넌트 라이프사이클의 호출 문제
- <a> 태그를 사용하여 페이지를 이동하면 React 컴포넌트의 라이프사이클 메서드가 호출되지 않는다.
- componentWillUnmount 등의 메서드가 호출되지 않아 정리(clean-up) 작업을 수행하기 어려울 수 있다. - React Router의 추가적인 기능 사용 불가
- URL의 동적 파라미터 처리, 중첩된 라우팅, 라우트 가드 등의 기능을 활용할 수 없다.
- 페이지 전환에 따른 새로고침
⭐️ 페이지 전환 방법
- <Link /> 컴포넌트 사용하기
- 브라우저 히스토리를 관리하면서 페이지 전환이 이루어지도록 해준다.
- 브라우저의 주소 표시줄이 업데이트되고 뒤로가기 및 앞으로가기 버튼을 사용하여 페이지 간 이동이 가능하다는 것을 의미한다. - 필요한 리소스만 로드하여 페이지를 업데이트할 수 있다.
- 전체 페이지를 새로고침하는 것보다 훨씬 빠르게 사용자 경험을 제공할 수 있다. - 사용자 상호 작용 없이도 프로그래밍 방식으로 페이지를 전환할 수 있다.
- 예를 들어, 특정 이벤트나 조건에 따라 특정 페이지로 자동으로 이동하고 싶을 때 사용한다. - 코드의 가독성이 향상되고 유지보수가 쉬워진다.
- 브라우저 히스토리를 관리하면서 페이지 전환이 이루어지도록 해준다.
- history 객체 사용하기
- React Router는 useHistory 훅을 제공하여 컴포넌트 내에서 history 객체를 직접 사용할 수 있다.
- history 객체를 사용하면 프로그래밍 방식으로 페이지를 전환할 수 있다.
- React Router는 useHistory 훅을 제공하여 컴포넌트 내에서 history 객체를 직접 사용할 수 있다.
- withRouter HOC 사용하기
- 일반 함수 컴포넌트에서 history, location, 및 match를 props로 받아올 수 있다.
- Redirect 컴포넌트 사용하기
- 페이지를 리디렉션할 수 있다.