javascript - svelte react 值不会随商店更改而更新

标签 javascript svelte svelte-store

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

$: 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 结果,它总是返回未定义,但是当我在控制台中运行它时,(用重复的对象替换所有商店)它返回正确的值

它之前可以工作,但我必须更改商店的结构,然后它停止工作,标记的行为就像它应该的那样,(checkbox == true 的所有类都被应用)但它不是 react 性的,这意味着当我从数组中删除变体时,它不会删除类,并且当我检查商店时,我看到变体已被正确删除,

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

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

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

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

$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;
});

关于javascript - svelte react 值不会随商店更改而更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70007314/

相关文章:

javascript - 如何将三个.js 网格合并为一个网格?

javascript - 为什么 Animejs 在 svelte-kit 骨架项目的构建中抛出此错误?

在 svelte.config.js 中找不到 SvelteKit $app

Svelte 商店未在屏幕上更新

javascript - 单击 svg poly 更改填充属性

javascript - 如何根据文件名将图像包装在标签中

svelte - 在 SvelteJS v3 中访问 Store 的内部循环值

svelte - 如何在 Svelte 中订阅的商店中发生值更改时触发功能?

javascript - 如何使用 Javascript 处理上传的文件

svelte - (!) 插件 slim : No custom element 'tag' option was specified