Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 서버 컴포넌트
- 중복선택
- 항해99추천
- 배열 중복 제거
- 날씨 api
- 동전 0
- 중복카테고리
- 프로그래머스
- react
- 항해99
- greedy
- jQuery
- 로딩 후 실행
- NextJS v13
- 부트캠프항해
- 탐욕알고리즘
- db수정
- server component
- 항해99후기
- 항해99솔직후기
- 카테고리필터
- JavaScript
- 배열 메소드
- 백준
- 그리디
- 실전프로젝트
- 자바스크립트
- 알고리즘
- 클라이언트 컴포넌트
- 숫자를 별점으로
Archives
- Today
- Total
공부 및 일상기록
[React] 리액트 경로 이동시 스크롤 상단 이동 방법 본문
프로젝트 진행중에 다른 페이지를 이동한 경우 스크롤이 이전 페이지의 스크롤에 유지되는 문제가 있었다.
사실 이 부분이 기능적으로 좋다고 생각하는 부분도 있지만, 다양한 방면에서 불편함이 더 많았다.
일단 방법은 경로가 달라지면 스크롤을 최상단으로 올리는 컴포넌트를 만들고, 해당 컴포넌트를 Router 사이에 넣는 방법이다.
//ScrollOnTop.jsx 파일
import { useEffect } from "react";
import { useLocation } from "react-router-dom";
export default function ScrollOnTop() {
//패스네임이 바뀌면 스크롤을 0,0으로 옮기는 역할을 함
const { pathname } = useLocation();
useEffect(() => {
window.scrollTo(0, 0);
}, [pathname]);
return null;
}
위처럼 react-router-dom의 useLocation을 이용하여 pathname의 변화를 감지하는 방법을 사용했다.
해당 pathname을 useEffect의 dependency로 넣어서 경로가 바뀔때 마다 window.scrollTo(0,0)이 실행된다.
해당 컴포넌트는 react-router-dom의 기능을 사용하고 있으므로 아래 코드블럭처럼 BrowserRouter 사이에 넣어야 한다.
Router.jsx
import { BrowserRouter, Route, Routes } from "react-router-dom";
import MainPage from "../page/MainPage";
import ScrollOnTop from "../utils/ScrollOnTop";
const Router = () => {
return (
<BrowserRouter>
<ScrollOnTop /> //이렇게 사이에 넣는다!
<Routes>
<Route element={<MainLayout />}>
<Route path="/" element={<MainPage />} />
</Routes>
</BrowserRouter>
);
};
export default Router;
일탈 (일상의 방탈출 : 방탈출 카페를 테마 및 업체별로 모아보는 프로젝트 사이트) 을 만들면서 처음으로 유저 피드백을 통한 기능 및 성능개선을 해보았다. 확실히 유저 피드백은 내가 생각하지 못한 사용자경험적인 부분에 대한 피드백, 그리고 예상치 못한 버그들이 수없이 많이 발견되었다. 언젠간 첫 배포에서도 이런 피드백보다는 사이트가 너무 편리하고 좋다 라는 말이 더 많도록 많이 노력해야겠다!
'개발 > React' 카테고리의 다른 글
[React] DOM과 Virtual DOM (0) | 2023.01.05 |
---|---|
[React] 페이지네이션 구현하기 (라이브러리 : react-js-pagination) (0) | 2022.12.15 |
[React] 중복 선택 가능한 카테고리 필터 만들기 (0) | 2022.11.13 |
[React] useState 한 박자 느리게 찍히는 문제 (비동기) (0) | 2022.10.30 |
[React] 새로고침 시에도 리덕스 내부의 데이터를 유지하는 방법 (0) | 2022.10.13 |