VueJS Разница между Methods и Computed

189
01 мая 2018, 00:48

Недавно начал учить Vue и сразу-же застрял на таком моменте

1) Что такое Methods 2) Что такое Computed 3) В чем их разница 4) Когда что применять.

У меня есть курс на Udemy но этот момент я никак не могу понять до этого все ясно но тут беда.

Answer 1

Кеширование вычисляемых свойств

Вы могли заметить, что того же результата можно достигнуть при помощи метода:

<p>Сообщение задом наперёд: "{{ reverseMessage() }}"</p>
// в компоненте
methods: {
  reverseMessage: function () {
    return this.message.split('').reverse().join('')
  }
}

Вместо вычисляемого свойства, мы можем указать ту же самую функцию в качестве метода. С точки зрения конечного результата, оба подхода действительно делают одно и то же. Но есть важное различие: вычисляемые свойства кешируются, основываясь на своих зависимостях. Вычисляемое свойство будет пересчитано только тогда, когда изменится одна из его зависимостей. Поэтому, пока message остаётся неизменным, многократное обращение к reversedMessage будет каждый раз незамедлительно возвращать единожды вычисленное значение, не запуская функцию вновь.

Кроме того, это значит, что следующее вычисляемое свойство никогда не обновится, так как Date.now() не является реактивной зависимостью:

computed: {
  now: function () {
    return Date.now()
  }
}

Использование метода, напротив, запускает функцию всегда, при каждом обращении к нему.

Зачем нужно кеширование? Представьте, что у вас есть дорогое вычисляемое свойство A, требующее цикла по огромному массиву и выполняющее множество вычислений. А ещё пусть будут другие вычисляемые свойства, в свою очередь, зависящие от A. Без кеширования геттер A будет запускаться куда чаще необходимого! В тех же случаях, когда кеширования нужно избежать — используйте методы.

P.S.: Взято с официального мануала. Судя по описанию можно сказать что computed кешируется, а methods вызывается каждый раз.

READ ALSO
Изменения при клике JS

Изменения при клике JS

Мне надо проверить были ли изменения при клике в iteminfo0_item_name или в iteminfo1_item_name

189
Не могу подключить файл к скрипту

Не могу подключить файл к скрипту

Есть два файла wtphp и api

185
Удаление данных из таблицы после теста

Удаление данных из таблицы после теста

Как в phpunit, можно очистить таблицу в тестовой базе после каждого теста? Пытался использовать:lluminate\Foundation\Testing\RefreshDatabase (примочка для тестирования...

190
Как сделать фильтр цен по meta полям Wordpress?

Как сделать фильтр цен по meta полям Wordpress?

Есть записи в wordpress, в записях есть поля вида:

153