Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
|
xuk_usesearchparams [2024/04/04 17:14] tro создано |
xuk_usesearchparams [2024/04/09 19:17] (текущий) tro |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ====== Хук useSearchParams ====== | ====== Хук useSearchParams ====== | ||
| + | ===== Читання параметрів з рядка адреси ===== | ||
| + | |||
| Для читання та зміни рядка запиту у React Router є хук useSearchParams, | Для читання та зміни рядка запиту у React Router є хук useSearchParams, | ||
| - | Він повертає масив із двох значень: | + | Він повертає масив із двох значень: |
| < | < | ||
| // src/ | // src/ | ||
| Строка 22: | Строка 24: | ||
| }; | }; | ||
| + | </ | ||
| + | ==== Параметри як об' | ||
| + | Якщо рядок запиту містить кілька параметрів, | ||
| + | < | ||
| + | const [searchParams] = useSearchParams(); | ||
| + | const params = useMemo( | ||
| + | () => Object.fromEntries([...searchParams]), | ||
| + | [searchParams] | ||
| + | ); | ||
| + | const { name, maxPrice, inStock } = params; | ||
| + | |||
| + | </ | ||
| + | ===== Встановлення параметра у рядок адреси ===== | ||
| + | < | ||
| + | const [searchParams, | ||
| + | const name = searchParams.get(" | ||
| + | . | ||
| + | . | ||
| + | setSearchParams({ name: inputValue }); | ||
| + | </ | ||
| + | ===== Відстеження змін у параметрах рядка адреси ===== | ||
| + | можна зреагувати на це і запустити ефект. | ||
| + | < | ||
| + | const App = () => { | ||
| + | const [user, setUser] = useState(null); | ||
| + | const [searchParams, | ||
| + | const username = searchParams.get(" | ||
| + | |||
| + | useEffect(() => { | ||
| + | // Тут виконуємо асинхронну операцію, | ||
| + | // наприклад HTTP-запит за інформацією про користувача | ||
| + | if (username === "" | ||
| + | |||
| + | 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=" | ||
| + | <button type=" | ||
| + | </ | ||
| + | {user && < | ||
| + | </> | ||
| + | ); | ||
| + | }; | ||
| </ | </ | ||