Svelte中input:bind循环更新不同迭代键时值同步异常问题
问题解决方法
1. 修正绑定语法错误
你的代码里bind:value{...}缺少了等号,Svelte的双向绑定正确语法是bind:value={表达式},这是导致绑定异常的基础问题之一:
{#each Object.keys(questions[qn].memberToSubQuestionMap[member].subQuestions) as subQuestion, k (subQuestion)} <input bind:value={questions[qn].memberToSubQuestionMap[member].subQuestions[subQuestion].answer} /> {/each}
2. 确保每个成员的subQuestion answer是独立引用
如果修改一个成员的输入后所有成员同步更新,大概率是不同member的subQuestions[subQuestion].answer指向了同一个变量引用(比如初始化时直接复制了同一个对象)。需要在初始化数据时,为每个member的每个subQuestion创建独立的answer变量,示例初始化逻辑(根据实际数据结构调整):
questions.forEach(question => { Object.values(question.memberToSubQuestionMap).forEach(memberData => { Object.values(memberData.subQuestions).forEach(subQ => { // 确保每个answer是独立的,而非共享引用 subQ.answer = typeof subQ.answer === 'string' ? subQ.answer : ''; // 若是数组类型则用 subQ.answer = subQ.answer ? [...subQ.answer] : []; }); }); });
3. 使用唯一的each循环key
不同member下的subQuestion可能存在同名情况,仅用subQuestion作为循环key会导致Svelte复用DOM元素,引发绑定混乱。建议使用结合member和subQuestion的唯一标识作为key:
{#each Object.keys(questions[qn].memberToSubQuestionMap[member].subQuestions) as subQuestion, k (`${member}-${subQuestion}`)} <input bind:value={questions[qn].memberToSubQuestionMap[member].subQuestions[subQuestion].answer} /> {/each}
内容的提问来源于stack exchange,提问作者Arun Pratap Singh
相关产品推荐
相关产品推荐

