我有点困惑为什么
$state
符文无法处理布尔条件。为什么这需要一个单独的符文,在这种情况下是$effect
?在 Svelte 文档中,他们强调尽可能少地使用 $effect
,但这对我来说似乎是一个非常标准的场景,所以我不确定为什么它不能与 $state
一起使用。
为什么这有效:
let isInteractivePage = $state(false);
$effect(() => {
isInteractivePage = $page.url.pathname.startsWith('/interactive');
});
但这不是:
let isInteractivePage = $state($page.url.pathname.startsWith('/interactive'));
后者初始化一个new状态,然后该状态独立于源。您在这里寻找的是
$derived
,这是一种基于依赖关系更新的状态。
const isInteractivePage = $derived($page.url.pathname.startsWith('/interactive'));
(可以用
const
来表示该变量不是手动更改的,但会在内部更新。)