Показать страницуИстория страницыСсылки сюдаODT преобразованиеНаверх Эта страница только для чтения. Вы можете посмотреть её исходный текст, но не можете его изменить. Сообщите администратору, если считаете, что это неправильно. ====== Хук useSearchParams ====== ===== Читання параметрів з рядка адреси ===== Для читання та зміни рядка запиту у React Router є хук useSearchParams, який є невеликою обгорткою над вбудованим у браузер класом [URLSearchParams] Він повертає масив із двох значень: об'єкт параметрів рядка запиту (примірник URLSearchParams) для поточного URL та функцію оновлення рядка запиту. Для отримання значень параметрів є метод **URLSearchParams.get(key)**, який чекає на ім'я параметра і повертає його значення або null якщо у рядку запиту немає такого параметра. <code> // 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 ( <div> <p>Name: {name}</p> <p>Color: {color}</p> <p>Maximum price: {maxPrice}</p> </div> ); }; </code> ==== Параметри як об'єкт ==== Якщо рядок запиту містить кілька параметрів, постійно використовувати метод get() може бути незручно. Ось простий спосіб перетворити екземпляр класу URLSearchParams у звичайний об'єкт із властивостями. <code> const [searchParams] = useSearchParams(); const params = useMemo( () => Object.fromEntries([...searchParams]), [searchParams] ); const { name, maxPrice, inStock } = params; </code> ===== Встановлення параметра у рядок адреси ===== <code> const [searchParams, setSearchParams] = useSearchParams(); const name = searchParams.get("name"); . . setSearchParams({ name: inputValue }); </code> ===== Відстеження змін у параметрах рядка адреси ===== можна зреагувати на це і запустити ефект. <code> 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 ( <> <form onSubmit={handleSubmit}> <input type="text" name="username" /> <button type="submit">Search</button> </form> {user && <UserInfo user={user} />} </> ); }; </code> /sites/data/pages/xuk_usesearchparams.txt Последнее изменение: 2024/04/09 19:17 — tro