Qual é a principal diferença entre um método e um valor calculado no Vue.js?
Eles parecem iguais e intercambiáveis.
javascript
methods
vue.js
vuejs2
computed-properties
Bootstrap4
fonte
fonte
Respostas:
Os valores e métodos computados são muito diferentes no Vue e definitivamente não são intercambiáveis na maioria dos casos.
Propriedade computada
Um nome mais apropriado para um valor calculado é uma propriedade calculada . De fato, quando o Vue é instanciado, as propriedades calculadas são convertidas em uma propriedade do Vue com um getter e, às vezes, um setter. Basicamente, você pode pensar em um valor calculado como um valor derivado que será atualizado automaticamente sempre que um dos valores subjacentes usados para calculá-lo for atualizado. Você não chama um computado e ele não aceita nenhum parâmetro. Você faz referência a uma propriedade computada como faria com uma propriedade de dados. Aqui está o exemplo clássico da documentação :
Que é referenciado no DOM assim:
Os valores calculados são muito valiosos para manipular dados existentes no seu Vue. Sempre que você deseja filtrar ou transformar seus dados, normalmente você usará um valor calculado para essa finalidade.
Os valores calculados também são armazenados em cache para evitar o cálculo repetitivo de um valor que não precisa ser recalculado quando não foi alterado (pois pode não estar em um loop, por exemplo).
Método
Um método é apenas uma função vinculada à instância do Vue. Ele só será avaliado quando você o chamar explicitamente. Como todas as funções javascript, ele aceita parâmetros e será reavaliado toda vez que for chamado. Os métodos são úteis nas mesmas situações em que qualquer função é útil.
A documentação do Vue é realmente boa e facilmente acessível. Eu recomendo.
fonte
Como o @gleenk pediu um exemplo prático para evidenciar as diferenças de cache e dependência entre métodos e propriedades computadas, mostrarei um cenário simples:
app.js
Aqui temos 2 métodos e 2 propriedades calculadas que executam a mesma tarefa. Os métodos
addToAmethod
eaddToBmethod
e as propriedades computadasaddToAcomputed
eaddToBcomputed
tudo add +20 (ou seja, oage
valor), quera
oub
. Em relação aos métodos, ambos são chamados toda vez que uma ação é executada em qualquer uma das propriedades listadas, mesmo que as dependências de um método específico não tenham sido alteradas. Para as propriedades calculadas, o código é executado apenas quando uma dependência foi alterada; por exemplo, um dos valores específicos da propriedade que se refere a A ou B será acionadoaddToAcomputed
ouaddToBcomputed
, respectivamente.O método e as descrições computadas parecem bastante semelhantes, mas como o @Abdullah Khan já o especificou , eles não são a mesma coisa ! Agora vamos tentar adicionar um pouco de html para executar tudo junto e ver onde está a diferença.
A demonstração de caso do Method
O resultado explicado
Quando clico no botão "Adicionar a A" , todos os métodos são chamados (veja o resultado da tela de log do console acima), o
addToBmethod()
também é executado, mas não pressionei o botão "Adicionar a B" ; o valor da propriedade que se refere a B não foi alterado. O mesmo comportamento ocorre se decidirmos clicar no botão "Adicionar a B" , porque novamente os dois métodos serão chamados independentemente das alterações de dependência. De acordo com esse cenário, é uma prática ruim porque estamos executando os métodos sempre, mesmo quando as dependências não foram alteradas. Isso realmente consome recursos, porque não há um cache para os valores das propriedades que não foram alterados.A demonstração do caso da propriedade Computed
O resultado explicado
Quando clico no botão "Adicionar a A" , apenas a propriedade computada
addToAcomputed
é chamada porque, como já dissemos, as propriedades computadas são executadas somente quando uma dependência foi alterada. E como eu não pressionei o botão "Add to B" e o valor da propriedade age para B não mudou, não há razão para chamar e executar a propriedade computadaaddToBcomputed
. Portanto, em certo sentido, a propriedade computada mantém o valor "igual inalterado" para a propriedade B como uma espécie de cache. E, nessa circunstância, isso é considerado uma boa prática .fonte
De
docs
Se você deseja que os dados sejam armazenados em cache, use as propriedades Computadas, por outro lado, se você não deseja que os dados sejam armazenados em cache, use propriedades simples de Método.
fonte
Uma das diferenças entre computado e método. Suponha que tenhamos uma função que retornará o valor do contador (o contador é apenas variável). Vamos ver como a função se comporta no método computado e no método
Computado
No primeiro momento da execução, o código dentro da função será executado e o vuejs armazenará o valor do contador no cache (para acessar mais rapidamente). Porém, quando chamarmos novamente a função, vuejs não executará novamente o código escrito dentro dessa função. Ele primeiro verifica as alterações feitas no contador ou não. Se alguma alteração foi feita, somente ele executará novamente o código que está dentro dessa função. Se não houver alterações feitas no contador, o vuejs não executará novamente a função. Ele simplesmente retornará o resultado anterior do cache.
Método
É como um método normal no javascript. Sempre que chamamos o método, ele sempre executa o código dentro da função, independentemente das alterações feitas no contador.
O método sempre reexecutará o código, independentemente de alterações no código. onde, conforme calculado, reexecute o código somente se um dos valores de sua dependência for alterado. Caso contrário, ele nos fornecerá o resultado anterior do cache sem reexecutar
fonte
Aqui está um detalhamento desta pergunta.
Quando usar métodos
Quando usar propriedades calculadas
fonte
Propriedades computadas
As propriedades computadas também são chamadas de valor computado. Isso significa que eles são atualizados e podem ser alterados a qualquer momento. Além disso, ele armazena em cache os dados até que sejam alterados. Quando o Vue é instanciado, as propriedades calculadas são convertidas em uma propriedade.
Mais uma coisa que quero compartilhar: você não pode passar nenhum parâmetro nas propriedades calculadas, por isso, ao chamar qualquer propriedade do computador, nenhum parêntese é necessário.
Métodos
Os métodos são iguais à função e funcionam da mesma maneira. Além disso, um método não faz nada, a menos que você o chame. Além disso, como todas as funções javascript, ele aceita parâmetros e será reavaliado toda vez que for chamado. Depois disso, eles não podem armazenar valores em cache
No método chamado parênteses, existe e você pode enviar um ou mais parâmetros.
fonte
Tropeçou na mesma pergunta. Para mim, é mais claro assim:
v-on directive
seguido por um método, ele sabe exatamente qual método chamar e quando chamá-lo.v-on directive
ele é chamado toda vez que um evento é acionado na página que atualiza o DOM (ou simplesmente precisa renderizar novamente uma parte da página). Mesmo quando esse método não tem nada a ver com o evento sendo acionado.this
palavra em sua definição de função.A conclusão aqui é que é uma prática recomendada usar as
computed
propriedades caso um método não esteja sendo chamado com ov-on directive
.fonte