You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Svelte中如何将对象成员Store的值作为Prop传递?

问题

我有一个包含Svelte Store的项目列表,类型定义如下:

interface Item {
  isAvailable: Writable<boolean>;
}

现在需要遍历这些项目,把每个item里isAvailable这个Store的值传递给一个接收boolean类型Prop的组件<Component>。我原本希望能用类似下面的简洁语法:

{#each items as item}
  <Component isEnabled={item.$isAvailable} />
{/each}

但这种写法并不生效。我目前想到的最优解是封装一个中间组件,但感觉样板代码太多:

<script>
  export let item: Item;

  $: isAvailable = item.isAvailable;
</script>

<Component isEnabled={$isAvailable} />
解决方案

方法1:用{#const}在循环内直接订阅

在#each循环中使用{#const}声明反应式常量,直接订阅Store的值,语法简洁且保持响应性:

{#each items as item}
  {#const isEnabled = $item.isAvailable}
  <Component {isEnabled} />
{/each}

方法2:内联$()语法直接取值

可以直接在Prop中用$()语法获取Store的当前值,无需额外变量:

{#each items as item}
  <Component isEnabled={$($item.isAvailable)} />
{/each}

这种写法更紧凑,但可读性稍弱,适合简单场景。

方法3:优化中间组件(复用场景)

如果需要在多个地方复用该逻辑,可以保留中间组件,但简化代码——不需要额外声明中间变量,直接在模板中使用Store订阅语法:

<script lang="ts">
  import Component from './Component.svelte';
  export let item: Item;
</script>

<Component isEnabled={$item.isAvailable} />

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:03:13