我开始使用 Svelte-5 和 Sveltekit 作为 Firebase 的 SPA。 在更新表单中,我喜欢检测字段何时更改以在对象道具更改时显示提交和重置等按钮。
现在我用这样的东西:
history = $State()
let delta = $derived({
title: sectionObj.title,
contra: sectionObj.contra,
exposed: sectionObj.exposed,
vat: sectionObj.vat,
groupIds: JSON.stringify(sectionObj.groupIds.filter((g) => g !== '')),
lookup: JSON.stringify(sectionObj.lookup),
ignored: sectionObj.ignored,
rename: sectionObj.rename,
});
onMount(() => {
...
history = delta;
});
let equal = $derived(isEqual(history, delta)); // lodash
还有其他建议吗?
您可以使用
$state
和 $effect
来检测正在进行的更改,但像您已经做的那样使用比较应该是可靠地检测实际差异的唯一方法。
用户可以更改某些内容,然后再次更改以将其恢复为原始值。这不会被通过
changed
设置为 true
的 $effect
标志捕获。