当任何一组变量发生变化时,Svelte 执行函数

pec*_*eps 4 svelte svelte-3

Svelte RealWord App 中有这样的东西:

$: query && getData();
Run Code Online (Sandbox Code Playgroud)

当页面大小或其他查询参数更改时,这会调用 REST API。

我对上市实体有类似的情况,并且会这样做:

 $: activePage && sort && pageSize && getData();
Run Code Online (Sandbox Code Playgroud)

这一切运作良好(虽然&&是一个奇怪的构造说我要执行getData()activePagesortpageSize改变。

当您还想包含评估为 Falsy 的变量时,使用这种方法会出现问题。

示例,添加searchQuery文本:

let searchQuery = "";
$: searchQuery && activePage && sort && pageSize && getData();
Run Code Online (Sandbox Code Playgroud)

现在反应性不起作用,因为searchQuery评估为false

我们可以完成这个:

$: activePage && sort && pageSize && getData();
$: searchQuery, getData();
Run Code Online (Sandbox Code Playgroud)

但是有了这个 getData() 被调用了 2 次。

有人知道更好的方法吗?

小智 13

为了使事情更清楚,您可以将观察到的变量作为参数传递给函数:

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

function onChange(...args) {
  getData();
}
Run Code Online (Sandbox Code Playgroud)

因此,您不必担心某些变量是否为假。


Mor*_*ish 10

您可以将,and&&语法用于任意数量的变量和条件

$: searchQuery, activePage && sort && pageSize && getData();
Run Code Online (Sandbox Code Playgroud)
$: searchQuery, activePage, sort, pageSize, getData();
Run Code Online (Sandbox Code Playgroud)

都是有效的,如果其中一个变量是假的,那么第二个就不会有问题,而第一个允许您确保某些变量不是假的。

  • 了解逗号运算符:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_o​​perator (2认同)