ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Link와 NavLink
    React 2021. 7. 29. 20:44

    리액트는 페이지(URL) 이동할 때마다 서버에서 받는 것이 아니라 자바스크립트가 출력을 해준다.

    페이지 경로를 나눠주는 것이 라우터이다.

     

    <Link>는 <a> 태그처럼 링크를 연결해주지만 URL 개념 하고는 다른 path 개념이다.

    리액트 라우터에서 페이지 이동할 때는 Link 컴포넌트를 사용하면 내가 이동하고자 하는 경로(URL)로 이동할 수 있다.

     

    아래와 같이 사용할 수 있다.

    <Link to="/about">About</Link>

     

    Link 컴포넌트를 사용하면 브라우저의 주소만 바꿀뿐, 페이지를 새로 불러오지는 않는다.

     

    ✏️ 예제로 Link 컴포넌트 사용해보기

    // App 컴포넌트
    import {
      Switch,
      Route,
      Link,
    } from 'react-router-dom';
    
    import Home from './Home';
    import About from './About';
    
    
    export default function App() {
      return (
        <div>
          <header>
            <h1>
              <Link to="/">홈</Link>
            </h1>
          </header>
          <Switch>
            <Route exact path="/" component={Home} />
            <Route path="/about" component={About} /> 
          </Switch>
        </div>
      );
    }
    // Home 컴포넌트
    import { Link } from 'react-router-dom';
    
    export default function Home() {
      return (
        <div>
          <h2>Home</h2>
          <ul>
            <li><Link to="/about">About</Link></li>
            <li><Link to="/xxx">찾을 수 없는 페이지</Link></li>
          </ul>
        </div>
      );
    }

    npm start를 해보면 아래와 같이 나온다.

     

    1️⃣ App 화면을 확인하면 기본 경로인 Home 컴포넌트를 확인할 수 있다.

       ✔️ window 객체를 통해서 현재 경로를 확인 할 수 있다.

           경로 : "/"

     

    아래와 같은 화면을 그려낸다.

     

     

    2️⃣ About을 클릭하면 아래 to="/about" 경로로 이동하였고, About 컴포넌트 내용을 확인 할 수 있다.

          ✔️ 마찬가지로 window 객체를 통해서 현재 경로를 확인 할 수 있다.

             경로 : "/about"

     

    아래와 같은 화면을 그려낸다.

    공식문서에 아래와 같이 NavLink 컴포넌트는 Link의 special version 이라고 명시 되어 있다.

    특정 링크에 스타일을 넣어 줄 수 있다.

     

    이것이 바로 Link와 NavLink의 가장 큰 차이점이다.

     

    💅 조금 더 특별한 기능이란?

    바로 activeStyle activeClassName 속성이다.

    리액트 웹의 현재 URL과 to가 가리키는 링크가 일치할 때, activeStyle과 activeClassName이 활성화 되고 일치하지 않으면 비활성화가 된다.

    // NavLink
    <NavLink to="/about">About</NavLink>
    
    // activeClassName 속성 
    <NavLink to="/faq" activeClassName="selected">
      FAQs
    </NavLink>
      
    // activeStyle 속성
    <NavLink
      to="/faq"
      activeStyle={{
        fontWeight: "bold",
        color: "red"
      }}
    >
      FAQs
    </NavLink>

     

    ✏️ 예제를 통해 activeStyle 속성 사용해자

    import {
      Switch,
      Route,
      NavLink,
    } from 'react-router-dom';
    
    import Home from './Home';
    import About from './About';
    
    const style = {
      fontWeight:'900',
      color:'red',
     }
    
    export default function App() {
      return (
        <div>
          <header>
            <h1>
              <p>
                <NavLink to="/" activeStyle={style}>홈</NavLink>
              </p>
              <p>
                <NavLink to="/about">About</NavLink>
              </p>
            </h1>
          </header>
          <Switch>
            <Route exact path="/" component={Home} />
            <Route path="/about" component={About} />  
          </Switch>
        </div>
      );
    }

     

     

    npm start를 해보면 아래와 같이 나온다.

     

    Link를 NavLink로 바꾸고 activeStyle 속성에 특정 스타일을 넣어 주었더니 아래와 같이 보여진다.

    ✏️ 예제를 통해 activeClassName  속성 사용해자

    import {
      Switch,
      Route,
      NavLink,
    } from 'react-router-dom';
    
    import styled from '@emotion/styled';
    
    import Home from './Home';
    import About from './About';
    
    const Li = styled.li({
      width: '30%',
      margin: '0 auto',
      '& a': {
        '&.active': {
          borderRadius: '2em',
          backgroundColor: 'pink',
        },
      },
    });
    
    export default function App() {
      return (
        <div>
          <header>
            <h1>
              <ul>
                <Li>
                  <NavLink to="/about" activeClassName="active">
                    About
                  </NavLink>
                </Li>
                <Li>
                  <NavLink to="/xxx">
                    찾을 수 없는 페이지
                  </NavLink>
                </Li>
                <Li>
                  <NavLink exact to="/">
                    홈
                  </NavLink>
                </Li>
              </ul>
            </h1>
          </header>
          <Switch>
            <Route exact path="/" component={Home} />
            <Route path="/about" component={About} />
          </Switch>
        </div>
      );
    }

     

     

    1️⃣ 찾을 수 없는 페이지가 현재 경로로 일치하면 아래와 같이 핑크색 배경색을 가지게 해주었다.

     

     

     

    2️⃣ About페이지가 현재 경로로 일치하게 되면 아래와 같이 변경된다.

     

     

     

    이렇게 링크에 좀 더 특별한 스타일을 주고 싶다면 NavLink를 사용하면 된다.

     

     

    'React' 카테고리의 다른 글

    클래스형 컴포넌트와 함수형 컴포넌트  (0) 2021.08.05
    useState Hook  (0) 2021.08.02
    Redux Thunk  (0) 2021.06.14
    react-redux 패키지와 Hooks 사용하기  (0) 2021.06.13
    Redux로 상태 관리하기  (0) 2021.06.12
Designed by Tistory.