В чем основное различие между методом и вычисленным значением в Vue.js?
Они выглядят одинаково и взаимозаменяемы.
javascript
methods
vue.js
vuejs2
computed-properties
Bootstrap4
источник
источник
Ответы:
Вычисленные значения и методы сильно отличаются в Vue и в большинстве случаев однозначно не являются взаимозаменяемыми.
Компьютерная собственность
Более подходящим именем для вычисляемого значения является вычисляемое свойство . Фактически, когда создается экземпляр Vue, вычисленные свойства преобразуются в свойство Vue с помощью метода получения, а иногда и установки. По сути, вы можете рассматривать вычисленное значение как производное значение, которое будет автоматически обновляться всякий раз, когда обновляется одно из базовых значений, используемых для его вычисления. Вы не вызываете вычисленное, и оно не принимает никаких параметров. Вы ссылаетесь на вычисленное свойство так же, как на свойство данных. Вот классический пример из документации :
Который упоминается в DOM, как это:
Вычисленные значения очень важны для манипулирования данными, которые существуют в вашем Vue. Всякий раз, когда вы хотите отфильтровать или преобразовать ваши данные, обычно вы будете использовать вычисленное значение для этой цели.
Вычисленные значения также кэшируются, чтобы избежать повторного вычисления значения, которое не нужно пересчитывать, если оно не изменилось (например, оно может не находиться в цикле).
метод
Метод - это просто функция, связанная с экземпляром Vue. Он будет оцениваться только при явном вызове. Как и все функции JavaScript, он принимает параметры и будет переоцениваться при каждом вызове. Методы полезны в тех же ситуациях, что и любая функция полезна.
Документация Vue действительно хороша и легко доступна. Я рекомендую это.
источник
Когда @gleenk попросил дать практический пример, чтобы показать различия в кеше и зависимости между методами и вычисляемыми свойствами, я покажу простой сценарий:
app.js
Здесь у нас есть 2 метода и 2 вычисляемых свойства, которые выполняют одну и ту же задачу. Методы
addToAmethod
&addToBmethod
и вычисленные свойстваaddToAcomputed
иaddToBcomputed
все дополнения +20 (т.е.age
значение) либоa
илиb
. Что касается методов, они оба вызываются каждый раз, когда какое-либо действие выполняется над любым из перечисленных свойств, даже если зависимости для одного конкретного метода не изменились. Для вычисляемых свойств код выполняется только при изменении зависимости; например, одно из определенных значений свойств, которое относится к A или B, сработаетaddToAcomputed
илиaddToBcomputed
, соответственно.Метод и вычисленные описания кажутся довольно схожими, но, как @Abdullah Khan уже указал , они не одно и то же ! Теперь давайте попробуем добавить html, чтобы выполнить все вместе и посмотрим, в чем разница.
Метод кейс демо
Объясненный результат
Когда я нажимаю кнопку «Добавить в A» , вызываются все методы (см. Результат экрана журнала консоли выше),
addToBmethod()
также выполняется, но я не нажимал кнопку «Добавить в B» ; значение свойства, которое относится к B, не изменилось. То же самое происходит, если мы решим нажать кнопку «Добавить в B» , потому что снова оба метода будут вызваны независимо от изменений зависимостей. В соответствии с этим сценарием это плохая практика, потому что мы выполняем методы каждый раз, даже когда зависимости не изменились. Это действительно потребляет много ресурсов, потому что нет кэша для значений свойств, которые не изменились.Демо-версия Computed property case
Объясненный результат
Когда я нажимаю кнопку «Добавить в A» ,
addToAcomputed
вызывается только вычисляемое свойство, потому что, как мы уже говорили, вычисляемые свойства выполняются только при изменении зависимости. И поскольку я не нажал кнопку «Добавить в B», а значение свойства age для B не изменилось, нет причин вызывать и выполнять вычисляемое свойствоaddToBcomputed
. Таким образом, в определенном смысле вычисляемое свойство поддерживает «такое же неизменное» значение для свойства B, как своего рода кеш. И в этом случае это считается хорошей практикой .источник
Из
docs
Если вы хотите, чтобы данные кэшировались, используйте Computed свойства с другой стороны, если вы не хотите, чтобы данные кэшировались, используйте простые свойства Method.
источник
Одно из различий между вычисленным и методом. Предположим, у нас есть функция, которая будет возвращать значение счетчика (счетчик просто переменный). Давайте посмотрим, как ведет себя функция как в вычислениях, так и в методах.
Компьютерный
В первый раз выполнения код внутри функции будет выполнен, и vuejs сохранит значение счетчика в кеше (для более быстрого доступа). Но когда мы снова вызываем функцию, vuejs больше не будет выполнять код, написанный внутри этой функции. Сначала проверяются любые изменения, внесенные в счетчик или нет. Если будут внесены какие-либо изменения, то только он повторно выполнит код, который находится внутри этой функции. Если в счетчике нет изменений, vuejs больше не будет выполнять функцию. Он просто вернет предыдущий результат из кеша.
метод
Это так же, как обычный метод в JavaScript. Каждый раз, когда мы вызываем метод, он всегда выполняет код внутри функции независимо от изменений, внесенных в счетчик.
Метод всегда повторно выполняет код независимо от изменений в коде. где as computed будет выполнять код повторно только в том случае, если изменилось одно из значений его зависимости. В противном случае он выдаст нам предыдущий результат из кэша без повторного выполнения.
источник
Вот разбивка этого вопроса.
Когда использовать методы
Когда использовать вычисляемые свойства
источник
Вычисленные Свойства
Вычисляемые свойства также называются вычисленными значениями. Это означает, что они обновляются и могут быть изменены в любое время. Кроме того, он кэширует данные, пока не изменится. Когда создается экземпляр Vue, вычисленные свойства преобразуются в свойство.
Еще одна вещь, которой я хочу поделиться: вы не можете передать какой-либо параметр в вычисляемые свойства, поэтому при вызове любого свойства компьютера не требуется скобок.
методы
Методы такие же, как функции и работают одинаково. Кроме того, метод ничего не делает, если вы его не вызываете. Кроме того, как и все функции javascript, он принимает параметры и будет переоцениваться при каждом вызове. После этого они не могут кэшировать значения
В вызове метода есть скобки, и вы можете отправить один или несколько параметров в этом.
источник
Наткнулся на тот же вопрос. Для меня это более ясно, как это:
v-on directive
ним метод, он точно знает, какой метод вызывать и когда его вызывать.v-on directive
него, он будет вызываться каждый раз, когда на странице, которая обновляет DOM, запускается событие (или просто необходимо повторно отобразить часть страницы). Даже если этот метод не имеет ничего общего с инициируемым событием.this
слово в определении функции.Вывод заключается в том, что рекомендуется использовать
computed
свойства в случае, если метод не вызывается сv-on directive
.источник