본문 바로가기
React/개념

URLSearchParams

by hihijh826 2024. 1. 23.
728x90
반응형
SMALL

📍URLSearchParams

1. 목적

  • JavaScript에서 URL의 쿼리 매개변수(문자열)를 다루기 위한 인터페이스
  • 상태 관리, 모달 표시, API 요청 등 다양한 상황에서 유용하게 활용

 

2. 쿼리 문자열의 구조

  • 쿼리 문자열은 URL에서 ? 기호 뒤에 위치하며, 여러 쿼리 매개변수는 & 기호로 구분된다.
  • 일반적으로 key-value 쌍으로 이루어짐
  • 사용 예:
  • const queryString = window.location.search; // '?key1=value1&key2=value2' const params = new URLSearchParams(queryString); const value1 = params.get('key1'); // 'value1'
  • 예시 URL:
<http://example.com/search?q=react&sort=popular>

 

3. 주요 메서드

  • append(name, value): 지정된 이름과 값을 가진 쿼리 매개변수를 추가
  • delete(name): 지정된 이름의 쿼리 매개변수를 삭제
  • get(name): 지정된 이름의 첫 번째 쿼리 매개변수 값을 반환
  • getAll(name): 지정된 이름의 모든 쿼리 매개변수 값을 배열로 반환
  • has(name): 지정된 이름의 쿼리 매개변수가 있는지 여부를 확인
  • set(name, value): 지정된 이름의 쿼리 매개변수 값을 설정. 이미 해당 이름의 쿼리 매개변수가 있는 경우 기존 값을 대체.
  • toString(): 현재 URLSearchParams 객체를 문자열로 반환.

 

4. 사용 예시

const params = new URLSearchParams('?name=John&age=25');

console.log(params.get('name')); // "John"
console.log(params.get('age')); // "25"

params.append('city', 'New York');
console.log(params.toString()); // "name=John&age=25&city=New%20York"

params.set('age', '30');
console.log(params.toString()); // "name=John&age=30&city=New%20York"

params.delete('name');
console.log(params.toString()); // "age=30&city=New%20York"

 

5. React에서의 사용

React에서는 URLSearchParams를 사용하여 URL의 쿼리 매개변수를 쉽게 처리할 수 있음 . 2가지 방법이 있음

 

5.1. useQuery 훅을 사용한 방법

import { useLocation } from 'react-router-dom';

const useQuery = () => {
  return new URLSearchParams(useLocation().search);
};

const MyComponent = () => {
  let query = useQuery();
  const searchTerm = query.get("q");

  return <div>검색어: {searchTerm}</div>;
};

query:

  • query는 URLSearchParams 객체입니다. 이 객체는 URL의 쿼리 문자열을 쉽게 다룰 수 있도록 도와주는 API입니다.
 **let query = useQuery();**
  • 정의: useQuery()는 React Router와 같은 라이브러리에서 제공하는 커스텀 훅
  • 특징:
    • React Hook으로 구현
    • 이미 파싱된 URLSearchParams 객체 반환
    • React의 생명주기와 통합
    • 컴포넌트가 리렌더링될 때 자동으로 최신 값 유지

 

예시 1

// 현재 URL: <https://example.com/search?q=react>
let query = useQuery(); //리액트에 더 적합
const searchTerm = query.get("q");

console.log(searchTerm); // "react"

query.get("q")는 URL의 쿼리 매개변수에서 "q"라는 이름의 값을 가져와 searchTerm 변수에 저장

 

예시2

import React from 'react';
import { BrowserRouter as Router, Route, Switch, Link, useLocation } from 'react-router-dom';

// useQuery 훅 정의
const useQuery = () => {
  return new URLSearchParams(useLocation().search);
};

// 쿼리 파라미터를 사용하는 컴포넌트
const SearchComponent = () => {
  let query = useQuery();
  const searchTerm = query.get("q") || "없음"; // 기본값 설정

  return <div>검색어: {searchTerm}</div>;
};

// 메인 컴포넌트
const App = () => {
  return (
    <Router>
      <div>
        <h1>검색 페이지</h1>
        {/* 링크를 통해 쿼리 파라미터를 변경 */}
        <nav>
          <Link to="/search?q=react">React 검색</Link>
          <Link to="/search?q=vue">Vue 검색</Link>
          <Link to="/search?q=angular">Angular 검색</Link>
          <Link to="/search">검색어 없음</Link>
        </nav>

        <Switch>
          <Route path="/search" component={SearchComponent} />
        </Switch>
      </div>
    </Router>
  );
};

export default App;

  • URL이 http://localhost:3000/search?q=react로 설정되면 화면에 "검색어: react"가 표시됨
  • 사용자가 "Vue 검색" 링크를 클릭하면 URL이 http://localhost:3000/search?q=vue로 변경되고, 화면에 "검색어: vue"가 표시됨

 

5.2. window.location.search를 사용한 방법

const MyComponent = () => {
  const query = new URLSearchParams(window.location.search);
  const searchTerm = query.get("q");

  return <div>검색어: {searchTerm}</div>;
};

const query = new URLSearchParams(window.location.search);
  • 정의: new URLSearchParams(window.location.search)는 브라우저의 전역 객체인 window를 사용하여 현재 URL의 쿼리 문자열을 가져와 파싱하는 방법.
  • 특징:
    • 브라우저 API를 직접 사용
    • 문자열 형태로 전체 쿼리 문자열을 반환
    • React의 생명주기와 무관
    • 수동으로 파싱 필요

 

예시 1)

// URL이 "<http://example.com/search?q=react&page=1>" 일 때
console.log(window.location.search);  
// 출력: "?q=react&page=1"

// 쿼리 파라미터를 직접 파싱해야 함
const searchParams = new URLSearchParams(window.location.search);
const query = searchParams.get('q');  // "react"

 

예시 2 )

import React from 'react';

const MyComponent = () => {
  // window.location.search를 사용하여 현재 URL의 쿼리 문자열을 가져옵니다.
  const query = new URLSearchParams(window.location.search);
  //window.location.search는 "?q=react"를 반환.
  //new URLSearchParams(window.location.search)를 사용하여 쿼리 문자열을 파싱하고, 쿼리 매개변수에 쉽게 접근할 수 있는 객체를 생성

  // 'q'라는 이름의 쿼리 파라미터 값을 가져옵니다.
  const searchTerm = query.get("q");

  return (
    <div>
      {/* 쿼리 파라미터에서 검색어를 표시합니다. */}
      <h1>검색어: {searchTerm}</h1>
    </div>
  );
};

export default MyComponent;

이 컴포넌트를 React 애플리케이션에 추가하고, URL에 쿼리 파라미터 q를 포함시키면, 해당 값이 화면에 표시됨.

예를 들어, URL이 http://example.com/search?q=react일 경우, 화면에는 "검색어: react"가 표시됨.

 

728x90
반응형
LIST

'React > 개념' 카테고리의 다른 글

useRef ( 외부 클릭시 모달 창 닫기 기능)  (0) 2024.02.02
useDebounce  (0) 2024.02.02
React Router Dom 훅  (0) 2024.01.23
리액트 Router Dom 및 적용  (0) 2024.01.15
구조 분해 할당  (0) 2024.01.15