SvelteJs: глубокое наблюдение за вычисленными свойствами

На данный момент мы можем сделать ниже, используя вычисленные свойства.

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/. Но это снова объясняет глубокое наблюдение.

Обновление: PS Я знаю, что {field.values.length} является недействительным javascript, я просто пытаюсь показать, чего я хочу достичь. Значение наблюдения вложенных свойств аналогично тому, как тлеет

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

1 ответ

Короткий ответ - нет - в Svelte изменения отслеживаются на верхнем уровне (компонента или хранилища), так как мониторинг вложенных свойств по отдельности потребует гораздо больше кода и внутреннего учета. Так fieldLength будет пересчитан всякий раз, когда field изменения (где "изменение" может означать либо новый объект, либо мутацию существующего, если вы не используете неизменяемую опцию). Ничего, что зависит от fieldLength будет обновлен, если длина не изменилась, однако.

Чем дольше ответ ({field.values.length}) => ... является недопустимым JavaScript, но есть верный (если на первый взгляд сбивает с толку) способ выразить ту же идею:

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

Вполне возможно, что будущие версии Svelte смогут отслеживать вложенные свойства и пересчитывать значения только при их изменении - если это так, он будет выяснять, какие вложенные свойства являются зависимостями, используя этот синтаксис деструктуризации. Но независимо от наших будущих намерений, это подход, который будет работать сегодня, хотя и с излишними перерасчетами.

Другие вопросы по тегам