DEV_IN/React

νŽ˜μ΄μ§€ 이동 μ‹œ, 슀크둀 상단 κ³ μ •ν•˜κΈ°

λ‹€λΉˆμΉ˜μ½”λ“œπŸ’Ž 2023. 2. 8. 02:54
  • 방법 1 (μ»΄ν¬λ„ŒνŠΈ λ³„λ‘œ μ μš©ν•  λ•Œ)
    •  src/util/useScrollTop.jsx
    • 적용된 μ»΄ν¬λ„ŒνŠΈ μ§„μž…μ‹œ νŽ˜μ΄μ§€ 맨 μœ„λ‘œ μŠ€ν¬λ‘€ν•΄μ£ΌλŠ” μ»€μŠ€ν…€ ν›…
import { useEffect } from "react";

const useScrollTop = () => {
  useEffect(() => {
    if (window) window.scrollTo(0, 0);
  }, []);
  return;
};

export default useScrollTop;
import useScrollTop from "../util/useScrollTop";

const BlogDetails = () => {
  useScrollTop();

  return (
	//μƒλž΅...
  );
};

export default BlogDetails;
  • 방법 2 (전체 νŽ˜μ΄μ§€μ— μ μš©ν•  λ•Œ)
    • src/hooks/ScrollTop.jsx
import { useEffect } from "react";
import { useLocation } from "react-router-dom";

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

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

  return null;
}
  • App.jsx (APPLY)
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { Outlet } from "react-router-dom";
// import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
import GlobalStyle from "./assets/style/GlobalStyle";
import Header from "./components/Header/Header";
import Footer from "./components/Footer/Footer";
import { Suspense } from "react";
import Loading from "./components/Loading";
import ScrollTop from "./hooks/ScrollTop";

const queryClient = new QueryClient();

export default function App() {
  return (
    <Suspense fallback={<Loading />}>
      <QueryClientProvider client={queryClient}>
        <ScrollTop />
        <GlobalStyle />
        <Header />
        <Outlet />
        <Footer />
        {/* <ReactQueryDevtools initialIsOpen={true} /> */}
      </QueryClientProvider>
    </Suspense>
  );
}