React 8

React Router에서 탭과 페이지네이션을 URL로 관리하는 전체 흐름

SPA 환경에서 탭 이동이나 페이지 이동을 할 때, URL에 상태를 남기면 아래와 같은 장점이 있습니다.새로고침해도 상태가 유지됨북마크/공유가 가능함뒤로가기/앞으로가기 사용 가능이 글에서는 useSearchParams를 이용해탭(tab)과 페이지(page)를 URL 쿼리로 관리하는 완전한 흐름을 단계별로 설명합니다. 1) 컴포넌트 첫 렌더링: URL 파라미터 읽기컴포넌트가 처음 렌더링되면 아래 코드가 실행됩니다. const [searchParams, setSearchParams] = useSearchParams();searchParams → 현재 URL의 쿼리 정보를 가지고 있는 객체setSearchParams → URL을 변경하는 함수예를 들어 URL이 /cs/notice라면, 처음에는 쿼리가 없기 ..

React 2025.11.29

탭을 클릭하면 URL 파라미터가 바뀌는 구조

URL이 곧 상태(state)다일반적으로 React에서 탭 전환을 만들면 아래처럼 state를 씁니다const [activeTab, setActiveTab] = useState('notice');하지만 이 방식은 문제점이 있습니다:새로고침하면 탭이 초기화됨URL 공유 시 어떤 탭인지 전달되지 않음뒤로가기/앞으로가기 브라우저 기능을 활용할 수 없음그래서 “URL을 state처럼 사용”하는 방식이 훨씬 안정적이고 UX가 좋습니다. 탭 전환 핸들러const handleTabChange = (tab) => { setSearchParams({ tab, page: 1 });};사용자가 “공지사항” 탭을 클릭하면 내부적으로 이렇게 됩니다:setSearchParams({ tab: 'notice', page: 1 })..

React 2025.11.29

URL 쿼리 파라미터 기반 탭 전환 구조

현재 사용자가 어떤 탭을 보고 있는지를 URL의 쿼리 파라미터로 관리하고,그 값을 기반으로 UI가 결정되는 구조.즉,/users?tab=info/users?tab=posts/users?tab=setting 왜 URL로 탭을 관리할까? 새로고침해도 탭이 유지됨state로 관리하면 새로고침하면 날아감 → 다시 기본탭URL로 관리하면:/users?tab=posts→ 새로고침해도 여전히 posts 탭 그대로 표시됨 뒤로가기 / 앞으로가기 가능탭1 → 탭2 → 탭3뒤로가기 → 탭2 → 탭1 공유하기 쉬움현재 보고 있는 탭 URL을 그대로 공유할 수 있음."이 페이지의 게시글 탭 좀 봐"URL만 보내면 됨 → 완전한 상태 복원 가능 서버 사이드 렌더링(SSR)에서도 유리Next.js, Remix 같은 SSR 프레임..

React 2025.11.29

Controlled Input 패턴

React에서 여러 input 필드를 다룰 때, 각 input마다 onChange를 따로 만들 필요 없이 하나의 handleChange 함수로 모든 입력을 처리할 수 있습니다.핵심은 input의 name 속성과 상태 객체(state)를 연동하는 방법입니다. 코드 구조const [formData, setFormData] = useState({ userId: '', password: '' });const handleChange = (e) => { const { name, value } = e.target; // ① 구조 분해 할당 setFormData(prev => ({ // ② 상태 업데이트 ...prev, // 이전 상태 ..

React 2025.11.29

useEffect에서 비동기 처리

검색 결과를 화면에 표시하는 기능은 대부분 외부 API 호출과 연동됩니다. 네트워크 요청은 지연(latency)이 있기 때문에 동기 처리하면 UI가 멈추거나 응답성이 나빠집니다. 그래서 React에서는 useEffect 안에서 비동기 함수를 호출해 데이터를 불러오는 패턴을 씁니다. 왜 비동기여야 하나? (이유)네트워크 지연: fetch, axios 같은 호출은 시간이 걸립니다. 동기 처리 시 브라우저가 멈출 수 있습니다.사용자 경험: 로딩 스피너, 에러 메시지, 재시도 등은 비동기 흐름에 맞춰야 구현하기 쉽습니다.취소/경합(레이스) 제어: 사용자가 검색어를 바꾸면 이전 요청을 취소해야 오래된 응답으로 덮어쓰지 않습니다.확장성: 페이지네이션, 무한스크롤, 캐싱, 디바운스 같은 고급 기능이 비동기 기반입니다..

React 2025.11.29

URL에서 검색 키워드 읽어와 UI에 표시하기

검색 결과 페이지는 URL 쿼리(?keyword=...)를 기준으로 데이터를 다시 불러오고, 사용자에게 현재 검색어와 결과 개수를 보여줘야 합니다. URL에서 검색 키워드 추출/* 검색 파라미터 */const [searchParams] = useSearchParams(); // URL의 쿼리 파라미터 가져오기const searchKeyword = searchParams.get('keyword') || ''; // keyword 값 추출 useSearchParams()React Router 훅으로 현재 URL의 쿼리 파라미터를 다루는 객체(URLSearchParams와 유사)를 반환합니다.searchParams.get('keyword')keyword 파라미터 값을 읽습니다.값이 있으면..

React 2025.11.29

카드 리스트 렌더링과 컴포넌트 네비게이션 동작 원리

프로젝트를 진행하면서 화면에 여러 개의 상품(혹은 그룹 구매 항목)을 카드 형태로 나열해야 하는 경우가 많습니다. React에서는 이런 리스트 형태 UI를 map()과 재사용 가능한 컴포넌트를 조합해 구현하는 것이 일반적입니다. 아래 코드는 deadlineSoonItems 배열을 받아서 GroupBuyCard 컴포넌트를 반복 렌더링하는 방식으로 작성되어 있습니다. {deadlineSoonItems.map(item => ( ))} 리스트를 map()으로 렌더링하는 이유deadlineSoonItems는 서버나 상태관리에서 불러온 객체 배열입니다.각 요소를 화면에 보여주기 위해 보통 아래 패턴을 사용합니다.map(): 배열 → JSX 요소 리스트 생성key 값 필수: React가 각 요소를 식별하..

React 2025.11.29

React Router에서 관리자 페이지 여부 판단하기

프로젝트를 개발하다 보면, 일반 페이지와 관리자 페이지의 레이아웃을 다르게 구성해야 하는 경우가 많습니다.예를 들어 일반 페이지에는 Header와 Footer를 보여주고,관리자 페이지에는 AdminSidebar만 보여주고 싶을 수 있죠.이때 가장 간단한 방법이 바로 React Router의 useLocation() 훅을 사용하는 것입니다. useLocation()으로 현재 URL 정보 가져오기const location = useLocation();useLocation()은 React Router에서 제공하는 훅으로,현재 페이지의 URL 정보가 담긴 객체를 반환합니다. location 객체는 아래처럼 생겼습니다:{ pathname: "/admin/statistics", // 현재 경로 search: "..

React 2025.11.29