본문 바로가기
Javascript&Typescript/React

페이지 이동 Hook useNavigate, useParams, useSearchParams

by clolee 2022. 12. 2.

 페이지 이동 Hook
useNavigate, useParams, useSearchParams

 

useNavigate :

다른 페이지로 이동, 뒤로 가기 시 사용하는 hook.

import axios from "axios";
import React, { useState, useEffect } from "react";
import { useNavigate } from "react-router-dom";


const InfoProductSoldOutPage = () => {
  
  ...
  
  const navigate = useNavigate();

  return (
    <div>
      ...

      <Paper style={{ marginBottom: 50 }}>
        <Button
          size="large"
          variant="contained"
          onClick={() => navigate("/listSoldOut")}
        >
          돌아가기
        </Button>
      </Paper>
    </div>
  );
};

export default InfoProductSoldOutPage;


useParams, useSearchParams :

쿼리 스트링을 받아 오는 Hook

 

useParams :

전달된 Path variable을 useParams custom hook을 통해 가져와 페이지 이동

import { useParams } from "react-router-dom";

const InfoProductSoldOutPage = () => {
  const { goods_id } = useParams();
  ...
  useEffect(() => {
    axios
      .all([axios.get(`/product/order/${goods_id}`)])
      .then(
        axios.spread((res1) => {
          setDetailProduct(res1.data);
        })
      )
      .catch((error) => {
        console.log("error", error);
      });
  }, [goods_id]);
  
  ...
  
  return (
    <div>
      <Box
        sx={{
          display: "flex",
          "& > :not(style)": {
            m: 1,
            width: 1,
            minWidth: 300,
            minheight: 270,
          },
        }}
      >
        <Paper variant="outlined">
          <div>상품 {goods_id} 페이지</div>
			...
        </Paper>
      </Box>
	...
    </div>
  );
};

 

useSearchParams :

쿼리 스트링(name과 value를 엮어서 데이터를 전송)을 통해 url을 변경시킨다.

import { Link, useSearchParams } from "react-router-dom";

// 페이지 번호 버튼 클릭 시 현재 페이지를 받아 url에 현재 페이지 표시
const [searchParams, setSearchParams] = useSearchParams();
const ListProductsSalePage = () => {
...

    const handlePageChange = (currentPage) => {
      setCurrentPage(currentPage);
      console.log(currentPage);
      axios
        .get(`/product/on-sale`, {
        params: {
          page: currentPage - 1,
          size: postPerPage,
        },
      })
      .then((res) => {
        setProducts(res.data);
        setSearchParams({ page: currentPage });
        console.log("current page : ", searchParams.get("page"));
      })
      .catch((error) => {
        console.log("error", error);
      });
    };

    return (
        <div>
        ...
          <Paging
            page={currentPage}
            postPerPage={postPerPage}
            count={count}
            setPage={handlePageChange}
          />
        </div>
        )
      );
}

 

 

참고 :

https://velog.io/@haesoohaesoo/useParams-useLocation-useNavigate

 

 

 

 

 

 

 

 

 

댓글