[react] 페이지 이동시 스크롤 최상단에 위치하기

2023. 2. 8. 18:11·React
목차
  1. useLocation()
  2. ScrollToTop.js
  3. App.js
  4. 원하는 좌표로 이동하기
728x90
반응형

페이지 이동시 임의의 페이지 화면이 보여서 눌렀을 때 최상단에 위치하게 하기 위해서 찾아보다가 이글을 정리하게 되었다.

useLocation()

처음에 useLocation()을 알아야 하는데 이는

npm install react-router-dom

react-router-dom 모듈을 설치하여 임포트해준다.

import { useLocation } from 'react-router-dom';
const location = useLocation();

useEffect(() => {
  console.log(location);
}, [ location ])

그리고 나서 location 변수에 담아 이를 location이 랜더링될 때마다 콘솔에 찍어 보이게 한다. 그리고 콘솔에 보면, hash, pathname, search 등이 보이는데 pathname을 사용해 줄 것이다.

  • 콘솔 로그에 보이는 것
    • pathname : URL에 도메인다음의 / 부터의 문자열
    • search : pathname다음의 ?부터의 문자열
    • hash : pathname다음의 #부터의 문자열
    • state : location 객체로 화면이동을 시킬 때 코드 상으로 보내는 객체

→ 여기서 pathname을 사용해줄 것이다.

ScrollToTop.js

import { useEffect } from "react";
import { useLocation } from "react-router-dom";

export default function ScrollToTop() {
  const { pathname } = useLocation();

  useEffect(() => {
    window.scrollTo(0, 0);
  }, [pathname]);

  return null;
}
반응형

→ 이렇게 하면 location이 담아지고 이를 랜더링시에 scroll을 이동시키다는 말이다. 즉 페이지 이동이 일어나게 되면 scrollTo는 스크롤을 이동시킨다는 말이다. 안에 있는 값들은 (x좌표, y좌표)가 되게 된다. 즉, (0,0)은 최상단을 의미한다.

App.js

import ScrollToTop from "./ScrollToTop";

...

function App() {
  return (
    <BrowserRouter>
      <ScrollToTop />
      <NavBar />
      <Switch>
        ...
      </Switch>
      <Footer />
      <BackTop />
    </BrowserRouter>
  );
}

export default App;

app.js에서 BorwserRouter아래에 위치해주게 되면, 자연스럽게 최상단으로 페이지가 이동하게 된다.

원하는 좌표로 이동하기

document.querySelector("#champPre")

documnet.querySelector()로 하여 위치를 알아낸다. 그리고 classname이나 id를 이용해 querySelector를 사용하여 값을 가져온다.

 let location = document.querySelector("#champPre")});

이를 location 이라는 변수에 선언하고 querySelector의 값을 할당한다.

let location = document.querySelector("#champPre").offsetTop;

offsetTop으로 변수 location의 top 위치를 가져온다.

  const scrollMove = () => {
    let location = document.querySelector("#champPre").offsetTop;
    window.scrollTo({ top: location, behavior: "smooth" });
  };

위치를 모두 가져왔으므로 이를 window.scrollTo()의 parameter에 넣어주고나서 로직을 scrollMove라는 함수로 만들어준뒤 버튼에 onClick함수에 넣어서 사용하면 된다.

 

728x90
반응형
저작자표시 (새창열림)
  1. useLocation()
  2. ScrollToTop.js
  3. App.js
  4. 원하는 좌표로 이동하기
'React' 카테고리의 다른 글
  • [React] startTransition 개념 알아보기
  • [React] Automatic Batching(react v18) 개념 쌓아보기
  • [React] useRef() 개념 쌓아보기
  • [React] code-splitting 코드스플리팅 알아보기
Uheeking
Uheeking
안녕하세요. react, flutter, node.js에 관련해서 글을 쓰는 블로그입니다.
Uheeking의 it로그안녕하세요. react, flutter, node.js에 관련해서 글을 쓰는 블로그입니다.
Uheeking
Uheeking의 it로그
Uheeking
전체
오늘
어제

공지사항

  • 분류 전체보기 (254)
    • React (48)
    • Node.js (32)
    • Next.js (22)
    • Vue.js (15)
    • javascript (3)
    • Django (19)
    • etc (23)
    • Flutter (30)
    • Error (16)
    • AWS (11)
    • docker & Kubernetes (32)
    • git (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
250x250

인기 글

태그

  • 쿠버네티스
  • MySQL
  • firebase
  • flutter
  • useEffect
  • 넥스트
  • NEXT
  • Kubernetes
  • 리액트
  • 플러터
  • Vue.js
  • Props
  • Create
  • supabase
  • sequelize
  • next.js
  • mosquitto
  • 오블완
  • docker
  • Django
  • Express
  • 장고
  • React
  • 도커
  • 노드
  • SSR
  • AWS
  • 티스토리챌린지
  • error
  • node.js

최근 댓글

최근 글

250x250
hELLO· Designed By정상우.v4.5.2
Uheeking
[react] 페이지 이동시 스크롤 최상단에 위치하기

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.