我对 svelte 还很陌生,一周前就开始了......
\n\n我想知道我真的很喜欢\xe2\x9d\xa4\xef\xb8\x8f\xe2\x9d\xa4\xef\xb8\x8f它但我有一个问题\xe2\x98\xb9\xef\xb8 \x8f\xe2\x98\xb9\xef\xb8\x8f
\n\n我正在尝试访问脚本标签中的 $: 变量,但出现 Error Cannot access \'greeting\' before initialization。
<script>\n let name = \'world\';\n $: greeting = `Hello ${name}`\n console.log(greeting)\n</script>\n\n<h1>Hello {name}!</h1>\nRun Code Online (Sandbox Code Playgroud)\n\n我还尝试在使用它之前用let声明变量
\n\n let greeting\nRun Code Online (Sandbox Code Playgroud)\n\n但在这种情况下console.log输出undefined.
我正在尝试使用反应变量:
我的缓存文件:
import { makeVar } from "@apollo/client"
export const colorVar = makeVar('red')
Run Code Online (Sandbox Code Playgroud)
文件 A(更新值):
import { colorVar } from "cache"
colorVar('green')
Run Code Online (Sandbox Code Playgroud)
文件 B(读取值并应在文件 A 中更新值后重新渲染):
import { colorVar } from "cache"
console.log(colorVar())
Run Code Online (Sandbox Code Playgroud)
文件 A 中的更新操作不会触发文件 B 的重新渲染
https://svelte.dev/repl/f8db4771ba794c658d7c25a6e72d1b46?version=3.18.1中的代码
有两个“反应变量”:
$: nameUpperCase = name.toUpperCase();
$: if (name === "city") {
console.log("RUNNING HERE 01", age);
} else {
console.log("RUNNING HERE 02", age);
}
Run Code Online (Sandbox Code Playgroud)
如果值发生name变化,那么nameUpperCase也会发生变化。这个很容易。
但是对于第二部分,似乎当nameor的值age发生变化时,则对该if行进行评估。如果从age中删除console.log(),如https://svelte.dev/repl/68c2cdea2bfd462caa5ac5519fb8b99d?version=3.18.1 中所示,则age更改无关紧要。if不评估该行。
但是age从不参与为if语句生成任何最终值。它只是被打印出来,并且console.log总是 return undefined。那么规则是什么?不知何故,Svelte“神奇地”收集了 之后的所有变量$:,然后如果其中任何一个发生变化,则执行$:? 那么即使变量不参与形成某个最终值,它仍然被考虑吗?