SvelteJs : Deep observe on computed properties

标签 svelte svelte-component

到目前为止,我们可以使用计算属性执行以下操作。

isTypeRange: ({ field }) => {
        return field && field.type === "Range";
      }

我们可以做这样的事情吗?

fieldLength: ({field.values.length}) => {
  return field.values.length;
}

点击此链接 https://github.com/sveltejs/svelte/issues/11最终把我带到了https://github.com/sveltejs/svelte-extras/ .但这再次解释了深度观察。

更新: 附言 我知道 {field.values.length} 是无效的 javascript,我只是想展示我想要实现的目标。意思是观察类似于 ember 的嵌套属性

fieldLength: Ember.computed('field.values.[]', {
get(){}, set(){}
})

最佳答案

简短的回答是否定的——在 Svelte 中,更改是在顶层(组件的或 store 的)跟踪的,因为单独监视嵌套属性将涉及更多的代码和内部簿记。因此,只要 field 发生变化,就会重新计算 fieldLength(这里的“变化”可能意味着新对象,也可能是现有对象的突变,除非您使用 immutable 选项).但是,除非长度发生变化,否则 依赖于 fieldLength 的任何内容都不会更新。

较长的答案是 ({field.values.length}) => ... 是无效的 JavaScript,但是有一种有效的(如果看起来很困惑)表达相同的方式想法:

fieldLength: ({field:{values:{length}}}) => length

可能 Svelte 的 future 版本可以跟踪嵌套属性并且仅在它们更改时重新计算值——如果是这样,它将通过使用解构语法找出哪些嵌套属性是依赖项。但无论我们 future 的意图如何,这种方法在今天仍然有效,尽管偶尔会进行不必要的重新计算。

关于SvelteJs : Deep observe on computed properties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52939745/

相关文章:

binding - Svelte:如何将格式化输入字段绑定(bind)到属性

typescript - 如何将商店访问到商店数组中?使用 Svelte

javascript - 等待组件在自定义 svelte 指令中准备就绪

Sveltekit - 在组件内使用外部 REST api

javascript - Svelte.js 组件属性在带有 customElement : true 的脚本标记内未定义

svelte - 如何从组件内部调用组件上的销毁?

Svelte:每次更改绑定(bind)属性时如何阻止 {#await} block 刷新?

javascript - 如何将 Svelte 组件导入 JS 文件

javascript - Tailwind 类在 Svelte 应用程序中不起作用

javascript - 了解 Svelte tick() 生命周期