为什么我不能在 svelte3 的脚本标签内访问“$:”又名反应变量?

Why can't I access a "$:" aka reactive variable inside the script tags in svelte3?

一周前开始使用 svelte 还是个新手......

我想知道它我真的很喜欢❤️❤️但我有一个问题☹️☹️

我正在尝试访问脚本标记中的 $: 变量,但出现错误 Cannot access 'greeting' before initialization

<script>
    let name = 'world';
    $: greeting = `Hello ${name}`
    console.log(greeting)
</script>

<h1>Hello {name}!</h1>

我还尝试在使用它之前用 let 声明变量

    let greeting

但在这种情况下 console.log 输出 undefined.

您的问题的解决方案是使 console.log(greeting) 语句也具有反应性:

<script>
    let name = 'world';
    $: greeting = `Hello ${name}`
    $: console.log(greeting)
</script>

<h1>Hello {name}!</h1>

因为 console.log 在您的示例中不是反应式语句,它实际上在 任何反应式语句之前执行,在您的 'normal' 流程执行之后脚本。所以当它执行时 greeting 还没有被设置(你的第一个错误)或者它已经通过 let greeting 声明设置为 undefined (你的第二个错误)。

通过使 console.log 具有反应性,您可以确保它会被执行 (a) after greeting 已设置(这解决了您的第一个问题),和 (b) 每次 greeting 设置(这解决了你的第二个问题)。在反应式语句中为它赋值之前,您不必声明 greeting