Как связать состояние компонента Svelte со строкой запроса в Sapper
Мое приложение-сапер вращается вокруг компонента таблицы. Этот компонент таблицы имеет состояние (смещение, лимит, сортировка, фильтры и т. Д.), Которое я хотел бы представить в строке запроса URL-адреса.
В настоящее время таблица работает нормально, напрямую обновляя ее состояние:
<button on:click="{() => offset += limit}" disabled="{offset + rows.length >= count}">»</button>
Я вижу, что существует хранилище страниц, доступное только для чтения, которое может дать мне доступ к текущему значению строки запроса. Я полагаю, я могу использовать что-то вроде URLSearchParams
генерировать ссылки с соответствующим значением обновляется.
Есть ли лучший способ справиться с этим (какой-то способ прямой привязки переменных к строке запроса)? Если нет, что будет лучшим способом для создания ссылок с обновленными строками запроса?
РЕДАКТИРОВАТЬ:
Мое текущее решение - следующая функция:
const getLink = queryStringDiff => {
const query = $page.query;
const path = $page.path;
const str = Object.entries({...query, ...queryStringDiff}).reduce(
(acc, cur) => `${acc}&${cur[0]}=${cur[1]}`, ''
).replace('&', '?');
return `${path}${str}`;
}
Который я упоминаю в a
тег, заменяющий вышеуказанную кнопку:
href="{getLink({'offset': (offset - limit)})}"
Это работает, но я чувствую, что должен быть лучший способ
1 ответ
Вы можете получить доступ к состоянию строки запроса из page
хранить:
<script>
import { stores } from '@sapper/app';
const { page } = stores();
$: start = $page.query.p * $page.query.itemsPerPage;
$: end = start + $page.query.itemsPerPage;
$: slice = myData.slice(start, end); // plus filtering, sorting etc
</script>
<table>
<thead>...</thead>
<tbody>
{#each slice as row}
<tr>...</tr>
{/each}
</tbody>
</table>
<a href="my-table?p={$page.query.p + 1}">next</a>
Если вам нужно перемещаться программно, вы можете использовать goto
:
<script>
import { stores, goto } from '@sapper/app';
// ...
const next = () => {
goto(`my-table?p=${$page.query.p + 1}`);
};
</script>