vue-query-params
Version:
Реактивная работа с query-параметрами (query params) во Vue 3
156 lines (113 loc) • 5.65 kB
Markdown
[](https://www.npmjs.com/package/vue-query-params)
[](https://www.npmjs.com/package/vue-query-params)
Удобная работа с query-параметрами во Vue 3 с типизацией и реактивностью. Ссылка на npm-пакет - https://www.npmjs.com/package/vue-query-params
`vue-query-params` — это легкая библиотека для синхронизации query-параметров URL с реактивными данными во Vue 3. Позволяет легко читать, изменять, валидировать и сбрасывать параметры запроса, не теряя сторонние параметры и сохраняя типизацию.
- Реактивная синхронизация query-параметров с состоянием компонента
- Гибкая типизация параметров (string, number, boolean, array, object, date)
- Кастомная сериализация/десериализация
- Валидация и нормализация значений
- Debounce обновлений URL
- Сброс и очистка параметров
- Не затирает чужие параметры в URL
- Простое подключение как плагина
```bash
npm install vue-query-params
```
или
```bash
yarn add vue-query-params
```
```typescript
import { useQueryParams } from 'vue-query-params'
const config = {
page: { type: 'number', default: 1 },
search: { type: 'string', default: '' },
tags: { type: 'array', default: [] }
}
const { params, update, reset, clear } = useQueryParams(config)
```
Теперь `params.value` всегда содержит актуальные значения из URL, а любые изменения автоматически обновляют адресную строку.
```vue
<script setup lang="ts">
import { useQueryParams } from 'vue-query-params'
const config = {
page: { type: 'number', default: 1 },
search: { type: 'string', default: '' },
tags: { type: 'array', default: [] }
}
const { params, update, reset, clear } = useQueryParams(config)
</script>
<template>
<input v-model="params.search" placeholder="Поиск..." />
<button @click="update({ page: params.page + 1 })">Следующая страница</button>
<button @click="reset">Сбросить</button>
<button @click="clear">Очистить параметры</button>
</template>
```
Если вам нужно работать только с одним query-параметром, используйте `useQueryParam`:
```typescript
import { useQueryParam } from 'vue-query-params'
const page = useQueryParam('page', { type: 'number', default: 1 })
// page.value — реактивное значение параметра "page"
```
**Параметры:**
- `key` — имя параметра в URL
- `config` — объект конфигурации (аналогичен одному элементу из useQueryParams)
**Возвращает:**
Реактивное значение параметра (ref).
Конфиг строго типизирован:
```typescript
const config = {
page: { type: 'number', default: 1, validate: v => v > 0 },
filter: { type: 'string', default: '' }
} as const
const { params } = useQueryParams(config)
// params.value.page — number
// params.value.filter — string
```
`useQueryParams(config, options)`
| Опция | Описание | По умолчанию |
|------------|-------------------------------------------|--------------|
| debounce | Задержка обновления URL (мс) | 0 |
| router | Кастомный экземпляр vue-router | auto |
| route | Кастомный route (например, для SSR) | auto |
| immediate | Синхронизировать сразу при инициализации | true |
| deep | Глубокий watch параметров | true |
- `params` — реактивный объект с параметрами
- `update(updates)` — обновить параметры
- `reset()` — сбросить к значениям по умолчанию
- `clear()` — удалить параметры из URL
- `destroy()` — остановить синхронизацию
```typescript
{
type: 'string' | 'number' | 'boolean' | 'array' | 'object' | 'date',
default: any,
serialize?: (value) => string,
deserialize?: (value: string) => any,
validate?: (value) => boolean,
normalize?: (value) => any,
required?: boolean
}
```
Можно подключить как плагин для глобальных настроек:
```typescript
import { createApp } from 'vue'
import { QueryParamsPlugin } from 'vue-query-params'
createApp(App)
.use(QueryParamsPlugin, { defaults: { debounce: 200 } })
.mount('#app')
```
MIT