速记:对计算属性的深入观察

时间:2018-10-23 01:13:29

标签: 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(){}
})

1 个答案:

答案 0 :(得分:0)

简短的回答是“否” —在Svelte中,更改是在(组件或store的顶层)进行跟踪的,因为分别监视嵌套属性将涉及大量代码和内部记账。因此,只要fieldLength发生更改(除非您使用immutable选项,否则“更改”可能表示一个新对象或现有对象的变异),field都会重新计算。除非长度更改,否则依赖{em>的不会更新。

更长的答案是fieldLength是无效的JavaScript,但是有一种有效的方法(如果看上去很混乱)来表达相同的想法:

({field.values.length}) => ...

可能是,将来的Svelte版本可以跟踪嵌套属性,并且仅在它们更改时才重新计算值-如果是这样,它将使用该解构语法找出哪些嵌套属性是依赖项。但是,尽管偶尔会有不必要的重新计算,但不管我们将来的意图是什么,这种方法今天都将奏效。