**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
15小时前就关门了。
Improve this question
所以在我的svelte项目中,我有一个文件输入卡的列表,你可以在其中删除或添加一个。即使文件输入绑定到卡上,删除也不会像它应该的那样工作。假设我有一个列表,比如
1.无文件
- example.png
1.无文件
当我删除索引0时,预期的行为是索引1中的项移动到顶部,文件在其中。它所做的是项移动到顶部,留下文件仍然在索引1中,而不是0
我也试着给文件输入ID,奇怪的是文件输入移动了,留下了FileList和后面的值?为什么会发生这种情况?
下面是repl文件:REPL
1条答案
按热度按时间0aydgbwb1#
使用键控
{#each …}
可以解决此问题;在输入中添加id不是一回事。当从each块迭代的列表中添加 * 或删除 * 项时,它将从列表的末尾开始执行,而不管您试图删除的项的索引是什么。如果没有一个键来告诉它如何唯一地标识特定的列表项,Svelte并不真正知道它应该修改哪些HTML元素(即使列表本身已经如预期的那样改变),它只能看到数组被重新分配了,长度也改变了,在这种情况下,它能做的最好的事情就是在末尾添加或删除元素,并更新改变的值。提供密钥将允许它知道哪些项仍然在那里;这是通过在
{#each fileList as f, index (f.id)}
开口的末端使用(f.id)
来完成的(仅仅在每个数组元素上提供ID是不够的;它不知道哪个属性是唯一值)。请参阅Keyed each blocks教程以及每个块的文档。由于您已经为每个条目设置了一个ID,因此可以将其用作块的键: