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

Svelte中如何访问数组内存储的svelte-forms字段store

问题描述

我正在使用svelte-forms,需要创建一个由fields组成的数组。

field()会返回一个writable store,是用于创建可充当输入控制器的新表单项的便捷函数。

现有如下使用场景:

<script lang="ts">
    let fields = [field("f1","f1",[]), field("f2","f1",[])]
</script>

{#each fields as field}
   {$field}
{/each}

需求是操作该fields数组,实现访问数组中任意一个field store的效果。

实现方法

数组中存储的每个元素本身就是field()返回的writable store实例,和普通数组元素的访问逻辑完全一致,不需要做特殊转换:

  • 脚本中访问:直接通过数组下标取值即可,配合svelte/store提供的get方法可以直接读取store瞬时值,也可以正常调用store的set、update方法修改值
    import { get } from 'svelte/store'
    
    // 取索引为0的第一个field store
    const firstFieldStore = fields[0]
    // 读取store当前值
    const firstFieldValue = get(firstFieldStore)
    // 修改store值
    firstFieldStore.set('新的字段值')
    
    如果不想依赖索引定位,可以在初始化时把数组改成带唯一标识的对象结构,后续通过标识查找更稳定:
    let fields = [
      { name: 'f1', store: field("f1","f1",[]) },
      { name: 'f2', store: field("f2","f1",[]) }
    ]
    // 按name查找对应store
    const f2Store = fields.find(item => item.name === 'f2').store
    
  • 模板中访问:直接通过下标定位到对应store,加$前缀即可直接读取值、做双向绑定
    <!-- 读取第二个字段的值 -->
    <p>第二个字段当前值:{$fields[1]}</p>
    <!-- 给第一个字段绑定输入框 -->
    <input type="text" bind:value={$fields[0]} />
    

注:原示例代码中数组定义末尾缺少闭合方括号],运行前需要补全,否则会触发语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:36:27