Svelte выполняет функцию при изменении любой группы переменных

В приложении Svelte RealWord есть что-то вроде этого:

https://github.com/sveltejs/realworld/blob/master/src/routes/_components/ArticleList/index.svelte

let query;
let articles;
let articlesCount;
$: {
    const endpoint = tab === 'feed' ? 'articles/feed' : 'articles';
    const page_size = tab === 'feed' ? 5 : 10;
    ...
    query = `${endpoint}?${params}`;
}
$: query && getData();
async function getData() {
    ({ articles, articlesCount } = await api.get(query...));
}

Это вызывает REST API при изменении размера страницы, конечной точки или других параметров запроса.

У меня похожая ситуация для листинга сущностей и делаю:

 $: activePage && sort && pageSize && getData();

Это все работает очень хорошо (хотя && - странная конструкция, чтобы сказать, что я хочу выполнить getData() когда activePage, sort или же pageSize изменения.

При таком подходе проблема возникает, когда вы хотите также включить переменную, которая оценивается как ложь.

Пример, добавить searchQuery текст:

let searchQuery = "";
$: searchQuery && activePage && sort && pageSize && getData();

Теперь реактивность не работает, так как searchQuery оценивает false,

Мы можем это сделать:

$: activePage && sort && pageSize && getData();
$: searchQuery, getData();

Для просмотра отдельных групп, но с этим getData() вызывается 2 раза.

Кто-нибудь знает лучший подход к этому?

2 ответа

Решение

Вы можете использовать , а также && синтаксис с любым количеством переменных и условий

$: searchQuery, activePage && sort && pageSize && getData();
$: searchQuery, activePage, sort, pageSize, getData();

оба являются допустимыми, и со вторым у вас не будет проблем, если одна из переменных будет ложной, а первая позволит вам убедиться, что некоторые переменные не ложные.

Чтобы прояснить ситуацию, вы можете передать наблюдаемые переменные функции в качестве аргументов:

      $: onChange(searchQuery, activePage, sort, pageSize);

function onChange(...args) {
  getData();
}

Таким образом, вам не нужно беспокоиться, если какая-то переменная ложна.

Другие вопросы по тегам