🎯 Por que usar computed()
?
O computed()
serve para criar valores derivados com base em dados reativos. Ele é recalculado automaticamente sempre que os dados que ele depende mudam.
💡 Exemplo com computed()
import { ref, computed } from 'vue' export default { setup() { const nome = ref('Maria') const saudacao = computed(() => { return `Olá, ${nome.value}!` }) return { nome, saudacao } } }
O que está acontecendo aqui?
-
nome
é um valor reativo. -
saudacao
é um valor computado que depende denome
. - Quando
nome.value
muda,saudacao
é atualizado automaticamente.
🔍 Computed vs Função
Por que não usar uma função comum?
function saudacao() { return `Olá, ${nome.value}` }
Essa função também funciona, mas ela será executada toda vez que o componente for renderizado, enquanto computed()
guarda em cache o valor até que as dependências mudem.
🕵️♂️ Observando mudanças com watch()
O watch()
permite reagir a mudanças em valores reativos, executando um código sempre que uma mudança ocorrer.
💡 Exemplo com watch()
import { ref, watch } from 'vue' export default { setup() { const contador = ref(0) watch(contador, (novoValor, valorAntigo) => { console.log(`Contador mudou de ${valorAntigo} para ${novoValor}`) }) const incrementar = () => contador.value++ return { contador, incrementar } } }
O que está acontecendo aqui?
-
watch()
observa o valor decontador
. - Quando
contador.value
muda, ele executa a função fornecida. - Essa função recebe dois parâmetros:
-
novoValor
: o novo valor da variável reativa. -
valorAntigo
: o valor anterior antes da mudança.
-
🔁 Observando objetos reativos com watch
Quando você usa reactive()
, é necessário usar { deep: true }
para observar mudanças internas no objeto.
import { reactive, watch } from 'vue' export default { setup() { const usuario = reactive({ nome: 'João', idade: 30 }) watch( () => usuario, (novo, antigo) => { console.log('Usuário mudou!', novo) }, { deep: true } ) return { usuario } } }
✅ Conclusão do Capítulo 3
Conceito | Quando usar? |
---|---|
computed | Quando você precisa de um valor derivado que dependa de outros valores reativos. Ele é memoizado (guardado em cache). Ideal para exibir no template. |
watch | Quando você precisa executar efeitos colaterais com base em mudanças de valores reativos, como fazer requisições ou logar valores. |
📌 Adicional: Diferença entre computed()
e watch()
🎯 Por que no computed()
você coloca dentro de uma const
e no watch()
não precisa?
1. computed()
O computed()
é um valor derivado que depende de outros dados reativos. Ele não é uma função comum, mas sim um objeto reativo que automaticamente calcula e atualiza seu valor conforme as dependências mudam.
-
computed()
retorna um objeto reativo, que precisa ser armazenado em uma variável (por isso, usamosconst
). - O valor resultante de
computed()
é acessado com.value
se for uma referência reativa, mas, internamente, o Vue trata isso como uma forma otimizada de recalcular o valor quando necessário.
Ou seja, ao usar const
com computed()
, você está criando um "valor reativo" que será atualizado conforme o estado que ele depende.
const saudacao = computed(() => { return `Olá, ${nome.value}!` })
Aqui, saudacao
é um valor computado e reagirá automaticamente a qualquer mudança em nome
(ou outras variáveis reativas que você use dentro de computed()
).
2. watch()
O watch()
não é um valor, mas sim um observador — ele não precisa ser armazenado em uma constante porque o seu objetivo é apenas "observar mudanças" e executar algum código quando essas mudanças ocorrem.
- O
watch
é executado automaticamente quando a variável observada muda. - Ele não retorna um valor, apenas executa a função de callback que você forneceu.
Por isso, não é necessário armazenar o resultado de watch()
em uma constante, já que você está mais interessado na execução de uma ação do que no valor em si.
watch(contador, (novoValor, valorAntigo) => { console.log(`Contador mudou de ${valorAntigo} para ${novoValor}`) })
Aqui, watch
apenas observará contador
e executará a função de callback sempre que o valor de contador
mudar. Não há necessidade de armazenar esse observador.
Resumo
-
computed()
: cria um valor reativo derivado e precisa ser armazenado em uma variável (const
). -
watch()
: é um observador de mudanças, que não retorna um valor, por isso, não precisa ser armazenado.
Top comments (0)