Home useLocation
Post
X

useLocation

useLocation

The useLocation hook returns the location object that represents the current URL. You can think about it like a useState that returns a new location whenever the URL changes.

useLocation 훅은 현재의 URL을 대표하는 location 객체를 반환합니다.

URL이 바뀔 때마다 새로운 location이 반환되는 useState 처럼 생각할 수 있습니다.

useLocation이 반환하는 Location 객체를 확인해보겠습니다.

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import React from "react";
import {
  BrowserRouter as Router,
  Switch,
  Route,
  Link,
  useLocation,
} from "react-router-dom";

export default function BasicExample() {
  return (
    <Router>
      <div>
        <ul>
          <li>
            <Link to="/">Home</Link>
          </li>
          <li>
            <Link to="/about">About</Link>
          </li>
        </ul>
        <hr />
        <Switch>
          <Route exact path="/">
            <Home />
          </Route>
          <Route path="/about">
            <About />
          </Route>
        </Switch>
      </div>
    </Router>
  );
}

function Home() {
  return (
    <>
      <p>Home</p>
    </>
  );
}

function About() {
  let locationObj = useLocation();

  console.log(locationObj);

  return (
    <>
      <p>About</p>
    </>
  );
}

About링크를 누르면 locationObj에 location객체가 저장되고 locationObj가 콘솔에 출력됩니다.

location-obj

  • pathname : path경로 문자열
  • search : ?부터 나오는 문자열 전부
  • hash : #부터 나오는 문자열 전부
  • key : 랜덤 6글자 문자열

    history stack에서 이 해당하는 location 객체를 찾기위한 고유의 문자열 키입니다.

  • state : URL에 붙여서 보내는 정보가 아닌 숨겨서 또는 코드로 보내는 정보

    URL처럼 공개적으로 보여지면 안되거나 URL 글자 수 제한에 영향을 주는 경우 state로 보냅니다.


useNavigate()와 useLocation()으로 데이터 주고받기

useNavigate Hook을 사용할 때 2번째 인자로 location 객체의 state로 데이터를 보낼 수 있습니다.

  • 두번쨰 인자의 state 속성으로 데이터를 담아서 보냅니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    import { useNavigate } from "react-router-dom";
    
    // ...생략
    
    const navigate = useNavigate();
    
    // ...생략
    
    const gotoMain = () => {
      navigate("/main", {
        state: {
          userId: user.uid,
        },
      });
    };
    
  • location 객체의 state에 내가 보낸 데이터들이 담겨있습니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    import { useLocation } from "react-router-dom";
    
    // ...생략
    
    const location = useLocation();
    
    // ...생략
    
    const [userId, setUserId] = useState(location.state.userId);
    
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.