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 | 29 | 30 | 31 |
Tags
- 밀러컬럼
- 백엔드
- 파킨슨병
- 내밥줄지켜
- 프로그래머스
- 2026
- 블레이버스
- 새복많
- 신입
- frontend
- 코딩
- react
- AI에게서 살아남기
- Web
- js
- #유데미 #udemy #웅진씽크빅 #스나이퍼팩토리 #인사이드아웃 #미래내일일경험 #프로젝트캠프 #부트캠프 #react #next.js #프론트엔드개발자양성과정 #개발자교육과정
- 자바스크립트
- 개발
- 웹개발
- javascript
- 밥줄지키기프로젝트
- pccp
- 프론트엔드
- 회사
- Next
- 타입스크립트
- 개발자
- 코딩테스트
- 프로그래밍
- 30대까지이루기
Archives
- Today
- Total
낭 만 당
React에서의 useNavigate와 Link 본문
React에서 이전 데이터를 전달하며 화면 이동하는 방법
조건 1
회원가입 버튼을 누르면 이전 단계에서 작성했던 모든 데이터가 alert에 노출되어야 한다.
데이터 전달 및 화면 이동 방식
- useNavigate
- Link
useNavigate
개요
useNavigate는 React Router v6에서 제공되는 훅 중 하나로, 함수형 컴포넌트에서 라우터 객체를 얻어 프로그래밍 방식으로 페이지 간 이동을 처리할 수 있게 한다.
사용법
import { useNavigate } from 'react-router-dom';
const navigate = useNavigate();
// 페이지 이동
navigate('/이동주소', {
replace: true, // 브라우저 히스토리를 교체
state: { key: value, ... } // 데이터 전달
});
예시
const onSubmitFnc = (data) => {
navigate('/Ph_Birth', { state: { ...data } });
};
replace 옵션
replace: true로 설정하면 브라우저의 히스토리를 변경하지 않고 페이지를 교체한다. 뒤로가기를 눌렀을 때 이전 페이지로 이동하지 않는다.
데이터 접근 방법 (useLocation)
import { useLocation } from 'react-router-dom';
const location = useLocation();
조건 2
뒤로가기를 눌러도 이전 폼의 데이터가 그대로 유지되어야 한다.
문제점
새로고침이나 뒤로가기를 눌렀을 때 데이터가 사라지는 문제가 발생한다.
해결책: useSearchParams
useSearchParams를 사용하여 브라우저 히스토리에 데이터를 유지할 수 있다.
코드
import { useForm } from 'react-hook-form';
import * as yup from 'yup';
import { yupResolver } from '@hookform/resolvers/yup';
import { EmailYup, PassWordYup } from '../../common/yupCondition';
import FormInput from '../../common/formInput';
import { useNavigate, useSearchParams } from 'react-router-dom';
const EmailPW = () => {
const [searchParams, setSearchParams] = useSearchParams();
const navigate = useNavigate();
const schema = yup.object().shape({
email: EmailYup,
passWord: PassWordYup,
});
const { register, handleSubmit, setValue, formState: { errors } } = useForm({
mode: 'onChange',
resolver: yupResolver(schema),
});
const onSubmitFnc = (data) => {
setSearchParams(data);
navigate('/Ph_Birth', { state: { ...data } });
};
if (searchParams.get('email')) {
setValue('email', searchParams.get('email'));
}
if (searchParams.get('passWord')) {
setValue('passWord', searchParams.get('passWord'));
}
return (
);
};
export default EmailPW;
발견한 문제점
useSearchParams와 navigate를 함께 사용하면 뒤로가기를 2번 눌러야 이전 페이지로 돌아가는 문제가 발생한다.
느낀 점
조건 1은 만족했지만, 조건 2는 완전히 해결하지 못하였다. 작성한 코드를 통해 데이터 전달 및 새로고침 문제 해결 방법을 배우는 계기가 되었다.
장단점
- useSearchParams: 새로고침 및 뒤로가기 시 데이터를 유지할 수 있지만, 쿼리 매개변수가 브라우저 주소창에 노출되므로 보안에 취약하다.
- useNavigate와 useLocation: 데이터를 간단하게 전달할 수 있지만, 새로고침/뒤로가기 시 데이터를 유지하지 못한다.
'Programming Record > Frontend' 카테고리의 다른 글
| 첫 3개월, 프론트엔드개발자로의 첫 사회 생활..기술적 회고 (0) | 2026.03.25 |
|---|---|
| Next.js에 대해서 - prologue (7) | 2025.07.26 |
| 웹 렌더링을 향상시키는 법, lazy loading에 대하여 (7) | 2025.07.12 |
| JavaScript와 TypeScript 무엇이 다를까? (1) | 2025.06.25 |
| Next.js 개념 정리 (4) | 2024.11.26 |