Svelte 似乎对分配的变量更改有反应

问题描述 投票:0回答:1

假设我将此作为主页:

<script>
    import Child from "./Child.svelte";

    let person = { name: "" };
</script>

<Child {person} />

小时候是这样的:

<script>
    export let person;

    let name;
    $: name = person.name;
</script>

<input bind:value={name} />

你可以尝试一下这里

我不直接绑定的原因

person.name
是因为我根本不想改变父对象,我更喜欢抛出一个事件。

我希望能够通过在输入中键入值来修改子组件的名称变量。父元素中的修改但是它根本不起作用,因为无论我在其中输入什么,输入仍然为空。

创建这个最小的示例并将

console.log
放置在任何地方后,似乎在我在输入字段中键入内容后,就会立即触发
$: name = person.name
行,但它不应该这样做,因为
person.name
不会改变,分配的变量确实如此。

这确实很简单,但我不明白为什么会发生这种行为,所以提前感谢您的帮助

svelte svelte-4
1个回答
0
投票

我终于找到了适合我的情况的解决方案。正如我在原帖中所说,我尽量避免改变任何对象的属性,所以实际上我可以在 Child.svelte 中添加

<svelte:options immutable />

而且它有效!这样,Svelte 不会更新组件,直到重新分配其父组件。我在这里找到了一些细节。

© www.soinside.com 2019 - 2024. All rights reserved.