如何在 Svelte 中跨多行进行反应性分配?

How to do a reactive assignment across multiple lines in Svelte?

在 Svelte 中,通常会分配从某些 props 或 state 反应计算的变量,如下所示:

    export let x: number
    export let y: number
    $: sum = x + y

当我的反应比 x + y 复杂得多时,它的多行形式是什么样的?

这个的扩展版本是

$: if (valesChanged) {
    // do whatever you want
}

条件可以是一个或多个无功值的变化。

如果所有道具有任何变化,或者更优雅的解决方案

$: if($$props) {
    console.log($$props)
}

我总是建议将稍微复杂(或更糟,显然)的操作放入其自身的函数中,然后使用您希望操作对其做出反应的变量调用该函数。它将提高可读性和可重用性并阐明意图。

我也鼓励尽可能使这些函数成为纯函数(即没有副作用),但这并不总是可能的。

例如,与其拥有这样的东西:

$: {
    ...multi-line complex operation on x and y setting value z...
}

我会这样做:

function complexOperation(a, b) {
  ...multi-line complex operation on a and b setting value c...
  return c
}

$: z = complexOperation(x, y)

我尽量将我所有的反应性陈述都放在一行中,否则我将它们移到它们自己的函数中,但我理解这是个人偏好。