苗条的反应价值不会随着商店的变化而更新

svelte reactive value doesn't update on store change

大家好,我有这个代码来检查是否选择了一个项目

$: checkbox = $chosenPackage.products.find(e => e.id == selectedProduct.product.id && e.name == selectedProduct.product.name)?.variants.some(e => e.id == v.id && e.name == v.name) || false

console.log 结果总是 returns 未定义但是当我 运行 它在控制台中时,(用重复的对象替换所有商店)它 returns正确的值

它之前工作,但我不得不改变商店的结构,那是当它停止工作时,标记表现得像它应该的那样,(应用了 checkbox == true 的所有 类 ) 但它不是反应性的,这意味着当我从数组中删除一个变体时,它不会删除 类,当我检查商店时,我看到该变体已被正确删除,

当组件重新呈现时,一切看起来都不错,但如果 checkbox 发生变化,它应该自动重新呈现,并且 checkbox 应该在商店中的任何内容发生变化但没有发生变化时自动更改

任何帮助将不胜感激,提前致谢

编辑:我刚刚意识到它在另一部分确实得到了更新

这是更新商店的代码,但部分不起作用

$chosenPackage.products.find(e => e.id == selectedProduct.product.id && e.name == selectedProduct.product.name).variants = [v]

所以我基本上是用新选择的变体覆盖整个数组

问题是您在更新分配 (find) 中使用方法调用。一旦有这样的方法调用,Svelte 就不会再将其编译为“更新商店”语句,因为它不知道该方法的作用以及更新商店是否正确。因此在这种情况下使用update方法

chosenPackage.update(current => {
  current.products.find(e => e.id == selectedProduct.product.id && e.name == selectedProduct.product.name).variants = [v];
  return current;
});