개발자굿즈샵 개인 프로젝트를 진행하면서 페이지 이동할 때 어떤 hook을 사용해야 하는지 많은 고민이 됐었다. 202상태일 때 페이지를 넘겨라! 이렇게 조건부를 붙여 페이지를 넘길 때 주로 사용하는 hook을 찾아보니useNavigate가 있었고, Link to 외에 다른 방법이 없는 것 같아 useNavigate를 사용하기로 결정했다.
//로그인 성공하면 productListpage로 이동 const navigate = useNavigate(); const successLogin = () => { navigate("/"); };
그런데 말입니다.. 사실 왜 useNavigate hook을 사용하는 게 좋은지 잘 알지 못했다. 그냥 Link to는 a태그의 대체역할 뿐이니 그러한 한계점을 보완해주는 react-router-dom hook이라고 생각했다.
내가 상품 디테일 페이지에서 결제하기 버튼을 누르면 주문 정보 입력하는 페이지로 넘길 때 수량, 가격, id등 상품 정보를 넘겨줘야 했는데, 열심히 구글링을 한 결과 useNavigate에 path외에 state를 객체로 형태로 키와 value 값을 정해주면 된다.
const nav = useNavigate();
const cookie = getCookie("refreshToken");
const GoPaymentPage = () => {
if (cookie) {
nav("/payment", {
state: {
productId: productId,
orderNum: orderNum,
price: price,
image: image,
productName: productName,
productInfo: productInfo,
shippingFee: shippingFee,
shippingMethod: shippingMethod,
},
});
} else if (!cookie) {
alert("로그인이 필요합니다. 😥");
}
};
const location = useLocation();
const productId = location.state.productId;
const orderNum = location.state.orderNum;
const price = location.state.price;
const shippingFee = location.state.shippingFee;
const totalPrice = parseInt(orderNum * price + shippingFee);
사용방법은 너무 간단하게 이게 끝!
참고로 useNavigate를 알기 전에는, state나 props 값을 다른 페이지로 전달하려고 App.jsx에서 render로 넘기는 비효율적인 코드를 사용한 적이 있었기에 이번 프로젝트는 정말 나의 성장에 도움이 되고 있다고 생각이 든다.
https://github.com/greenT-Hee/Blog_react/blob/main/my-app/src/App.jsx