URL의 한 부분으로 요청하고자 하는 URL에 부가적인 정보를 포함하고 싶은 경우 사용
http://myhomepage.com/products?sort=popular&sort=new
key=value
형태의 문자열로 표현된다key=value
페어를 구분할 때는 & 연산자를 이용한다.리액트에서 쿼리스트링을 사용하는 경우
<Link to="/products?sort=new" />
navigate("/products?sort=new")
와 같이 사용 가능하며
렌더링은 /products
URL에 해당하는 컴포넌트를 그려준다.
앞선 포스팅과 같이 react-router-dom
에서 제공하는 useLocation() Hook
을 사용하면 /products
라는 pathname과 함께 ?sort=new
라는 search 값도 가져올 수 있게됩니다.
import { useLocation } from 'react-router-dom'
// ex) url : https://velog.io/products?queryString
function Products() {
const location = useLocation();
console.log(location) // {pathname: '/products', search: '?queryString', hash: '', state: null, key: 'cfkmpx77'}
console.log(location.pathname) // '/products'
console.log(location.search) // '?queryString'
return (
<div>Products</div>
)
}
그러나 우리가 가져오기 원하는 쿼리스트링 부분에 key=value
페어가 많아지게 되면
원하는 정보만 파싱하는 것이 어려워지게 됩니다.
useSearchParams Hook
은 이러한 문제를 해결해 주며 더 나은 기능을 제공해줍니다.
import { useSearchParams } from 'react-router-dom'
// ex) url : https://velog.io/products?queryString
function Products() {
const [ searchParams, setSearchParams ] = useSearchParams();
return (
<div>Products</div>
)
}
useSearchParams Hook
은 useState와 비슷하게
searchParams와 setSearchParams를 배열의 형태로 리턴해주는데
위의 예시코드와 같이 사용하면 원하는 쿼리스트링 값을 얻을수도, 설정해 줄 수도 있습니다.
searchParams : URLSearchParams 객체, 쿼리스트링을 다루기 위한 여러 메서드 제공
setSearchParams : 인자에 객체 or 문자열을 넣어 URL의 쿼리스트링 변경
searchParams로 쿼리스트링을 세팅해주는 경우
setSearchParams 메서드로 적용을 시켜주어야 url에 반영이 된다.