개발자

리액트에서 헤더를 상황에 따라 다른 버전으로 보여줄 수 있는 방법이 있을까요?

2023년 05월 04일조회 863

안녕하세요 리액트를 사용하고 있는 프론트엔드 개발자입니다. 헤더는 어떤 페이지에서도 노출되어야 하기 때문에 라우터 상에서 공통적으로 노출되도록 처리해두었는데요, 기획적인 요청에 따라 헤더가 두가지 버전이 되었습니다 (사용자용 / 영업용) 여기서 제가 맞닥뜨린 문제는 1. 라우터 컴포넌트 상에서 현재의 path에 접근할 수 있는 방법을 잘 모르겠습니다. 2. path에 접근하는 방법을 안다고 해도, 어떤 방식으로 해당 두 버전을 다르게 노출시켜야 할지(조건을 어떻게 주어야 할지) 잘 모르겠습니다. 혹시 이와 관련해서 도움을 주실 수 있는 분이 있다면 댓글로 알려주시면 정말 감사하겠습니다🙇🏻‍♀️

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 3

강서지님의 프로필 사진

혹시 Next.js를 함께 쓰고 계신가요? 그렇다면 useRouter hook을 사용할 수 있을 것 같고, React router dom 등을 쓰고 계시다면 해당 라이브러리에서 제공하는 다른 메서드나 hook을 사용하여 path에 충분히 접근할 수 있을 듯합니다. 사용자용 헤더 컴포넌트와 영업용 헤더 컴포넌트는 디자인적, 기능적 차이가 큰가요? 어차피 아예 path가 다르다면 별도의 컴포넌트(예: BusinessHeader와 UserHeader)를 만들고, path에 따라 헤더를 렌더링해주면 되지 않을까 싶습니다. 그걸 Header라는 큰 컴포넌트로 감싸서 관리를 할 수도 있을 것 같고요. path가 같다면 좀 문제가 될 수 있는데, 로그인한 사용자의 정보를 기준으로 페이지를 다르게 그려주는 것도 한 가지 방법이 될 수 있을 것 같네요. (예: 관리자가 로그인하면 설정 메뉴를 보여준다든지)

profile picture

익명

작성자

2023년 05월 05일

안녕하세요:) 답변 감사합니다 path가 다르면 너무 좋겠지만 동일한데다가 별도로 구분하기 어려운 상황이라 고민이 깊네요ㅠㅠ 하지만 말씀주신 지식 참고하여 잘 해결해보겠습니다

Samuel님의 프로필 사진

패스는 router props으로 접근하는 방법이 있습니다. 사용자용, 영업용을 가르는 기준에 따라 if문이나 삼항 연산자 등으로 조건에 따라 컴포넌트를 뿌리면 됩니다.

1
return isUser ? <A /> : <B />;
커리어리 AI 봇님의 프로필 사진

안녕하세요! 리액트에서 헤더를 상황에 따라 다른 버전으로 보여줄 수 있는 방법에 대해서 답변드리겠습니다. 1. 라우터 컴포넌트 상에서 현재의 path에 접근하는 방법은 ' useLocation ' hook을 사용하면 됩니다. ' useLocation ' hook을 사용하면 현재 페이지의 경로에 대한 정보를 가져올 수 있습니다. 2. path에 접근하는 방법을 알았다면, ' pathname '에 따라 다른 헤더를 보여주기 위해서는 조건문을 사용하면 됩니다. 조건문으로 헤더를 렌더링하는 부분을 분리하거나, 헤더의 속성을 변경하는 방식으로 처리할 수 있습니다. 아래와 같이 ' useLocation ' hook을 사용하여 현재 페이지 경로에 대한 정보를 가져온 후, ' pathname '을 사용하여 조건문을 만들어 헤더를 렌더링하면 됩니다. 또는 ' className '을 변경하여 스타일을 적용하거나, 헤더의 속성을 변경하는 방식으로 처리할 수도 있습니다. 이렇게 조건문으로 헤더를 다르게 렌더링하는 것 외에도, 컴포넌트 분리를 통해 처리하는 방법도 있습니다. ' Header ' 컴포넌트를 ' UserHeader '와 ' BusinessHeader '로 분리하여 사용하면, 조건문을 사용하는 것보다 더 간단하고 가독성이 좋아질 수 있습니다. #3과 같이 ' Header ' 컴포넌트에서 ' UserHeader '와 ' BusinessHeader '를 분리하여 사용하면, 헤더를 렌더링하는 부분을 좀 더 깔끔하게 관리할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#1
import { useLocation } from 'react-router-dom';

function MyComponent() {
  const location = useLocation();
  console.log(location.pathname); // 현재 페이지 경로
  // ...
}

#2
import { useLocation } from 'react-router-dom';

function MyHeader() {
  const location = useLocation();
  const isUserVersion = location.pathname === '/user'; // 경로에 따른 조건

  return (
    <div className={isUserVersion ? 'user-header' : 'business-header'}>
      {isUserVersion ? <UserHeader /> : <BusinessHeader />}
    </div>
  );
}

#3
function UserHeader() {
  // 사용자용 헤더 렌더링
}

function BusinessHeader() {
  // 영업용 헤더 렌더링
}

function Header() {
  const location = useLocation();
  const isUserVersion = location.pathname === '/user'; // 경로에 따른 조건

  return isUserVersion ? <UserHeader /> : <BusinessHeader />;
}

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!