
React ๋ฅผ ์ฌ์ฉํ ์น ์ ํ๋ฆฌ์ผ์ด์
์์๋
URL ์ฟผ๋ฆฌ ์คํธ๋ง์ ํตํด ํ์ด์ง ์ํ๋ฅผ ์ ์งํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์ผ์ด ์ฆ๋ค.
์ด๋ด ๋
URLSearchParams๋ฅผ ํ์ฉํ๋ฉด URL ์ฟผ๋ฆฌ๋ฅผ ์ฝ๊ฒ ํ์ฑํ๊ณ ์กฐ์ํ ์ ์๋ค.
URLSearchParams๋ URL ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ๋ค๋ฃจ๊ธฐ ์ํ ๋ด์ฅ ๊ฐ์ฒด์ด๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ URL์ด ์๋ค๊ณ ํ์:
https://example.com/search?keyword=react&page=2
์ฌ๊ธฐ์ ?keyword=react&page=2๋ ์ฟผ๋ฆฌ ์คํธ๋ง์ด๊ณ ,
URLSearchParams๋ฅผ ์ด์ฉํ๋ฉด ํด๋น ๊ฐ์ ์ฝ๊ฒ ์ฝ๊ณ ์กฐ์ํ ์ ์๋ค.
React ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ฟผ๋ฆฌ ๋ฌธ์์ด์ ์ฝ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค:
import { useLocation } from 'react-router-dom';
function SearchPage() {
const { search } = useLocation();
const query = new URLSearchParams(search);
const keyword = query.get('keyword'); // 'react'
const page = query.get('page'); // '2'
return (
<div>
<h1>๊ฒ์์ด: {keyword}</h1>
<p>ํ์ด์ง: {page}</p>
</div>
);
}
useLocation()์ ํ์ฌ URL์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ณ search๋ ? ํฌํจํ ์ฟผ๋ฆฌ ๋ฌธ์์ดquery.get('key')๋ฅผ ํตํด ๊ฐ์ ์ถ์ถํ ์ ์๋ค.React ์์๋ URLSearchParams๋ฅผ ์กฐ์ํ๊ณ navigate๋ฅผ ํตํด URL์ ๋ณ๊ฒฝํ ์ ์๋ค.
import { useNavigate } from 'react-router-dom';
function FilterButton() {
const navigate = useNavigate();
const handleClick = () => {
const params = new URLSearchParams();
params.set('keyword', 'react');
params.set('page', '1');
navigate(`/search?${params.toString()}`);
};
return <button onClick={handleClick}>React ๊ฒ์ํ๊ธฐ</button>;
}
params.set()์ผ๋ก ์ฟผ๋ฆฌ ๊ฐ ์ถ๊ฐ/๋ณ๊ฒฝparams.toString()์ผ๋ก ์ง๋ ฌํnavigate()๋ก URL ๊ฐฑ์ URL์ ๋ฐฐ์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ์ถ๋ค๋ฉด ๊ฐ์ ํค๋ฅผ ์ฌ๋ฌ ๋ฒ ์ค์ ํ๋ฉด ๋๋ค.
const params = new URLSearchParams();
params.append('filter', 'frontend');
params.append('filter', 'backend');
console.log(params.toString());
// filter=frontend&filter=backend
const filters = params.getAll('filter');
// ['frontend', 'backend']
URLSearchParams๋ ๋ฌธ์์ด๋ง ๋ค๋ฃฌ๋ค. ์ซ์, boolean, ๋ฐฐ์ด์ ์ง์ ํ๋ณํ์ด ํ์ํจnull์ ๋ฐํํ๋ค โ ||๋ optional chaining (?.)์ผ๋ก ์ฒ๋ฆฌURLSearchParams๋ React์์ ์ฟผ๋ฆฌ ์คํธ๋ง์ ์ฝ๊ณ ์ฐ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํ๋ค.useLocation()๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ํ์ฌ URL์ ์ฟผ๋ฆฌ๋ฅผ ์ฝ๊ฒ ์ถ์ถํ ์ ์๋ค.useNavigate()์ ํจ๊ป ์กฐ์ํ๋ฉด ๋๋ค.append()์ getAll()์ ํ์ฉํ์.