티스토리 뷰
🚀useNavigate ?
useNavigate를 사용하면 새로고침 없이도 페이지를 이동할 수 있게 됩니다.
Link 태그와는 달리 클릭을 통한 함수 호출로 페이지를 이동한다는 개념 보다는 특정 조건을 충족할 경우 페이지 이동을 하도록 할 수 있습니다.
const navigate = useNavigate();
🚀 useNavigate로 데이터 보내고, useLocation으로 데이터 받자
useNavigate는 단순히 특정 조건에 충족할 경우 페이지를 이동하는 기능 뿐만 아니라 이동할 때 데이터를 실어서 보낼 수 있습니다.
보내고 나면 useLocation을 통해 그 데이터를 받아서 사용하게 되는 것인데요.
useNavigate('/submit', {
state: {
title,
content,
}
})
위 코드는 /submit 주소로 이동할 때 state라는 객체를 같이 들고 가겠다는 말과 같은데요.
이제 이 데이터를 받은 /submit 주소는 다음과 같이 데이터를 받아 사용하면 됩니다.
const location = useLocation();
const { title, content } = location.state;
우리가 useNavigate를 통해 데이터를 보낼 때 state 객체 안에 title과 content를 실어서 보냈기 때문에 위와 같이 구조분해 할당 방식으로 가져와서 변수를 사용하듯이 사용하면 끝입니다.
🚀 사용해 보자
만약 Home 컴포넌트에서 작성한 제목과 내용을 /submit url로 바로 보내고 싶다면 다음과 같이 컴포넌트를 우선 만들 겁니다.
import { useState } from 'react';
import { useNavigate } from 'react-router-dom';
function Home() {
const navigate = useNavigate();
const [title, setTitle] = useState('');
const [content, setContent] = useState('');
const onChangeInput = (e) => {
if (e.target.name === 'title') setTitle(e.target.value);
if (e.target.name === 'content') setContent(e.target.value);
};
return (
<div>
<h2>제목</h2>
<input name="title" onChange={onChangeInput} />
<h2>내용</h2>
<input name="content" onChange={onChangeInput} />
<div>
<button>바로 전송하기</button>
</div>
</div>
);
}
export default Home;
이제 바로 전송하기 버튼을 누르면 제목 input, 내용 input에 입력한 데이터를 /submit 주소로 이동할 때 이 데이터를 객체로 묶어 같이 보내려고 합니다.
const onClickSubmit = () => {
navigate('/submit', {
state: {
title,
content,
},
});
};
이제 바로가기 버튼을 누르게 되면 Home 컴포넌트에서 작성한 title과 content가 state라는 객체에 실려 /submit 주소로 가게 됩니다.
이제 /submit 주소에서는 이 온 데이터를 useLocation으로 받아보고 사용도 해봅시다
import { useLocation } from 'react-router-dom';
function Submit() {
const location = useLocation();
const { title, content } = location.state;
console.log(title, content);
return (
<>
<h3>제목 : {title}</h3>
<h3>내용 : {content}</h3>
</>
);
}
export default Submit;
'프론트엔드 > React' 카테고리의 다른 글
[React] Redux-Toolkit를 알아보자🪄 줄여서 RTK (0) | 2023.03.14 |
---|---|
[React] 협업을 위한 Prettier, Eslint, Husky 설정 (0) | 2023.03.13 |
[React] Redux vs Context API (0) | 2023.02.28 |
[React] 리덕스(Redux) - 상태 관리 라이브러리 (0) | 2023.02.26 |
[React] Flux 패턴이란? (0) | 2023.02.26 |
- Total
- Today
- Yesterday
- next.js
- 자바스크립트
- styled-components
- testing
- jest
- 데이터분석
- 리액트 훅
- 리액트
- 딥러닝
- react
- 프론트엔드
- 프론트엔드 공부
- 디프만
- TypeScript
- frontend
- 자바스크립트 기초
- rtl
- JSP
- Python
- 파이썬
- react-query
- 머신러닝
- 프로젝트 회고
- 타입스크립트
- 자바
- HTML
- 프론트엔드 기초
- 스타일 컴포넌트 styled-components
- 인프런
- CSS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |