苗条的反应价值不会随着商店的变化而更新
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;
});
大家好,我有这个代码来检查是否选择了一个项目
$: 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;
});