// src/pages/Products.jsx
import { useSearchParams } from "react-router-dom";
const Products = () => {
const [searchParams] = useSearchParams();
const name = searchParams.get("name");
const color = searchParams.get("color");
const maxPrice = searchParams.get("maxPrice");
return (
Name: {name}
Color: {color}
Maximum price: {maxPrice}
);
};
==== Параметри як об'єкт ====
Якщо рядок запиту містить кілька параметрів, постійно використовувати метод get() може бути незручно. Ось простий спосіб перетворити екземпляр класу URLSearchParams у звичайний об'єкт із властивостями.
const [searchParams] = useSearchParams();
const params = useMemo(
() => Object.fromEntries([...searchParams]),
[searchParams]
);
const { name, maxPrice, inStock } = params;
===== Встановлення параметра у рядок адреси =====
const [searchParams, setSearchParams] = useSearchParams();
const name = searchParams.get("name");
.
.
setSearchParams({ name: inputValue });
===== Відстеження змін у параметрах рядка адреси =====
можна зреагувати на це і запустити ефект.
const App = () => {
const [user, setUser] = useState(null);
const [searchParams, setSearchParams] = useSearchParams();
const username = searchParams.get("username");
useEffect(() => {
// Тут виконуємо асинхронну операцію,
// наприклад HTTP-запит за інформацією про користувача
if (username === "") return;
async function fetchUser() {
const user = await FakeAPI.getUser(username);
setUser(user);
}
fetchUser();
}, [username]);
const handleSubmit = e => {
e.preventDefault();
const form = e.currentTarget;
setSearchParams({ username: form.elements.username.value });
form.reset();
};
return (
<>
{user && }
>
);
};