Я разрабатываю компонент диаграммы Ганта в Svelte, и он состоит из сотен компонентов строки, каждый из которых содержит несколько компонентов задачи каждый.Задачи можно перетаскивать и перемещать.Производительность является приоритетом, и я использую виртуальный список для отображения только видимых строк.
<div class="scrollable">
{#each visibleRows as row (row.id)}
<div class="row">
{#each row.tasks as task (task.id)}
<Task from={task.from} to={to}/>
{/each}
</div>
{/each}
</div>
Проблема в том, что когда я перемещаю задачи и прокручиваю строки из вида, они уничтожаются, а когда я возвращаюсь к ним, их состояние сбрасывается.Этот REPL с использованием svelte-virtual-list иллюстрирует проблему https://svelte.technology/repl?version=2.13.5&gist=bdb4c523d2e1cf7e3aef452e3f24d988 Мне интересно, как лучше всего справиться с этой ситуацией.
В настоящее время я использую объект задачи в качестве опоры и обновляю егоссылка остается прежней, а прокрутка не влияет на нее.
<Task {task}/>
Но внутри Задачи I обновляется состояние, подобное этому
const {task} = this.get();
task.from = new Date();
this.set({task});
, и шаблон ссылается на каждую подпорку с помощью task.propnameи я не уверен, что это правильный способ сделать это, так как не ясно, что именно устанавливается.
Я мог бы связать переменные задачи следующим образом:
<Task bind:from=task.from
bind:to={task.to}/>
Но многиепеременные должны быть привязаны (более 10), и я хочу позволить возможным будущим плагинам обновлять новые реквизиты из компонента Task.
<Task {task}
{...task}/>
Это касается потенциально большего количества реквизитов, но я обновляюОбъект задачи в событии состояния выглядит следующим образом:
onstate({ changed, current, previous }) {
const {task} = this.get();
Object.assign(task, current);
this.set({task});
},
Какой из них мне лучше выбрать для производительности или есть лучший способ справиться с этим?