https://velog.io/@yiyb0603/React-Router-dom의-유용한-hooks들

 

React Router dom의 유용한 hooks들 📃

안녕하세요! 오늘은 제가 프로젝트들을 진행 해오면서 편리함을 느꼈던 react-router-dom의 유용한 hooks들에 대해서 소개하려고 합니다.

velog.io

import React, {useEffect, useState} from 'react'

import { Switch, Route, useLocation, useParams, Link, useRouteMatch} from 'react-router-dom'



function Coin() {
    const {coinId} = useParams<Params>();
    const { state } = useLocation<RouteState>();
    const priceMatch = useRouteMatch("/:coinId/price");    
    const chartMatch = useRouteMatch("/:coinId/chart");

    return (

                <>
                    ...
                    <Switch>
                        <Route path={`/:coinId/price`}>{/* `/${coinId}/price` */}
                            <Price/>
                        </Route>
                        <Route path={`/:coinId/chart`}>
                            <Chart/>
                        </Route>
                    </Switch>
    )
}

export default Coin

기존 Router를 사용하던 방법과 같이 <Switch> 컴포넌트 안에 만들게 되며 작성방법은 똑같이 작성하면 됩니다.

React-router v5를 사용해서 현재 버전과는 조금 차이가 있을 수 있습니다!

 

여기서 중요한점은 Router-dom hook을 사용하여 데이터를 활용하는 것입니다.

 

useParams : 주소창으로 파라미터 값을 받을 수 있다 여러개를 넘길 수 있지만 대칭시켜야하기 때문에 적당히 넘기는게 좋다고 생각합니다

<Route path="/:coinId">
		<Coin/>    
</Route>

 

useLocation : 사용자가 현재 머물러있는 페이지에 대한 정보를 알려주는 hooks입니다. 이러한 값들은 앵커 역할을 하는 Link를 통해 넘길 수 있으며 해당 Route로 이동하여 사용할 수 있습니다

 

<Link to={{
	pathname:`/${coin.id}`,
	state: {name:coin.name},
}}>
const { state } = useLocation<RouteState>();

 

useRouteMatch : 현재 Route가 입력한 Route인지를 비교하고 일치하면 데이터를 출력합니다. 만약 현재 있는 Route가 입력한 Route가 아닌 다른 루트에 있는 경우는 null을 출력하게 되고 일치한다면 아래와 같은 정보를 출력해줍니다.

const priceMatch = useRouteMatch("/:coinId/price");
const chartMatch = useRouteMatch("/:coinId/chart");

const {coinId} = useParams<Params>();
const { state } = useLocation<RouteState>();
const priceMatch = useRouteMatch("/:coinId/price");
const chartMatch = useRouteMatch("/:coinId/chart");

'TIL > 개념정리' 카테고리의 다른 글

CSRF와 방어 방법이 무엇인지  (0) 2022.07.09
XSS - 크로스 사이트 스크립팅  (0) 2022.07.05
Redux in NextJS + typescript  (2) 2022.07.03
React-query란?  (0) 2022.07.01
Recoil  (0) 2022.06.30
복사했습니다!