728x90
728x90
useSearchParams 훅
들어가며
- 리액트 라우터(React Router)에서 제공하는 @useSearchParams@ 훅에 대해 정리해본다.
useSearchParams
개념
- 리액트 라우터(React Router)를 사용하여 URL의 쿼리 파라미터를 읽고 설정하는 데 유용한 도구
- 이 훅을 사용하면 컴포넌트가 URL의 쿼리 스트링을 쉽게 접근하고 조작할 수 있다.
- React Router v6에서 도입되었고, 기존의 @useLocation@과 @useHistory@ 훅을 결합한 기능을 제공한다.
사용법
import React from 'react';
import { useSearchParams } from 'react-router-dom';
function MyComponent() {
// 쿼리 파라미터 읽기
const [searchParams, setSearchParams] = useSearchParams();
// 특정 쿼리 파라미터 값 가져오기
const paramValue = searchParams.get('paramName');
// 쿼리 파라미터 설정
const updateSearchParams = () => {
setSearchParams({ paramName: 'newValue' });
};
return (
<div>
<p>Current param value: {paramValue}</p>
<button onClick={updateSearchParams}>Update Param</button>
</div>
);
}
- 쿼리 파라미터 읽기
- @searchParams@는 @URLSearchParams@ 객체이다.
- 따라서, @get@, @getAll@, @has@, @keys@ 등의 메서드를 사용할 수 있다.
- 쿼리 파라미터 설정
- @setSearchParams@ 함수는 새로운 @URLSearchParams@ 객체를 인자로 받는다.
- 기존의 쿼리 파라미터를 덮어쓰게 된다.
- 쿼리 파라미터 변경
- @setSearchParams@는 객체나 @URLSearchParams@ 객체를 인자로 받을 수 있다.
- 변경하고 싶은 쿼리 파라미터를 키-값 쌍으로 전달하면 된다.
- 다중 쿼리 파라미터
- 여러 쿼리 파라미터를 동시에 설정하거나 변경할 수 있다.
예제 코드
- URL의 @param1@과 @param2@를 읽고, 버튼을 클릭하여 각각의 읽어온 값들을 새로운 값으로 업데이트하기
import React from 'react';
import { useSearchParams } from 'react-router-dom';
function MultiParamsComponent() {
const [searchParams, setSearchParams] = useSearchParams();
const updateMultipleParams = () => {
setSearchParams({ param1: 'value1', param2: 'value2' });
};
return (
<div>
<p>Param1: {searchParams.get('param1')}</p>
<p>Param2: {searchParams.get('param2')}</p>
<button onClick={updateMultipleParams}>Update Params</button>
</div>
);
}
참고
- 다음과 같이 브라우저에서 기본적으로 제공하는 @URL()@ 메서드를 이용하여 요청된 URL의 파라미터 값을 가져올 수 있다.
import AuthForm from '../components/AuthForm';
function AuthenticationPage() {
return <AuthForm />;
}
export default AuthenticationPage;
export async function action({ request }) {
const searchParams = new URL(request.url).searchParams; // 브라우저에서 기본으로 제공하는 함수
const mode = searchParams.get('mode') || 'login';
const data = await request.formData();
const authData = {
email: data.get('email'),
password: data.get('password'),
};
}
참고 사이트
728x90
728x90
'Programming > React.js' 카테고리의 다른 글
[React.js] Suspense 컴포넌트 (0) | 2024.08.06 |
---|---|
[React.js] 낙관적 업데이트(Optimistic Updates) (React Query) (0) | 2024.07.10 |
[React.js] Tanstack Query(React Query) (0) | 2024.07.09 |
[React.js] 지연 로딩(Lazy Loading) (0) | 2024.07.08 |
[React.js] defer() (0) | 2024.07.07 |
[React.js] useFetcher 훅 (0) | 2024.07.07 |
[React.js] json() 유틸리티 함수 (React Router) (0) | 2024.07.05 |
[React.js] useRouterError 훅 (0) | 2024.07.05 |