🎯 O que é o watchEffect()
?
O watchEffect()
é um hook poderoso da Composition API que executa reatividade de forma automática e pode ser usado quando você deseja observar efeitos colaterais (side effects) baseados em mudanças reativas.
-
Diferente do
watch()
, que é usado para observar valores específicos, owatchEffect()
observa todos os valores reativos usados dentro da sua função de forma automática. - Ele executa sempre que qualquer uma das dependências internas mudar, o que o torna muito útil para acompanhar mudanças em valores dinâmicos sem a necessidade de especificar as dependências explicitamente.
Como funciona o watchEffect()
?
import { ref, watchEffect } from 'vue'
export default {
setup() {
const contador = ref(0)
const nome = ref('Vue')
watchEffect(() => {
console.log(`O contador é: ${contador.value}, o nome é: ${nome.value}`)
})
const incrementar = () => {
contador.value++
}
return { contador, nome, incrementar }
}
}
O que está acontecendo aqui?
-
watchEffect()
observa automaticamente todas as dependências reativas dentro da função de callback (no caso,contador
enome
). -
Sempre que
contador
ounome
mudarem, owatchEffect
executará a função de callback novamente, exibindo no console o valor atualizado de ambos.
📌 Diferença entre watch()
e watchEffect()
-
watch()
: Reage a valores específicos (você escolhe o que quer observar). -
watchEffect()
: Reage a todas as dependências reativas dentro da função (não é necessário especificar as dependências).
🧩 Utilizando reactive()
com objetos complexos
O reactive()
é útil para criar objetos reativos. Quando você usa o reactive()
, o Vue automaticamente faz com que todas as propriedades do objeto sejam reativas.
Exemplo com reactive()
:
import { reactive } from 'vue'
export default {
setup() {
const pessoa = reactive({
nome: 'Lucas',
idade: 23
})
const mudarNome = () => {
pessoa.nome = 'João'
}
return { pessoa, mudarNome }
}
}
O que está acontecendo aqui?
-
pessoa
é um objeto reativo, e suas propriedades (nome
eidade
) serão automaticamente reativas. -
mudarNome()
altera o nome depessoa
e, por ser reativo, a interface do usuário será atualizada automaticamente.
📌 Como funciona a reatividade com objetos no reactive()
?
- Quando você usa
reactive()
, todas as propriedades do objeto se tornam reativas. - O Vue não precisa de
.value
para acessar as propriedades de um objeto reativo — basta acessar diretamente a propriedade, como se fosse um objeto normal.
⚡ Exemplo prático: Contador com reactive()
e watchEffect()
import { reactive, watchEffect } from 'vue'
export default {
setup() {
const estado = reactive({
contador: 0,
nome: 'Vue'
})
watchEffect(() => {
console.log(`Contador: ${estado.contador}, Nome: ${estado.nome}`)
})
const incrementar = () => {
estado.contador++
}
return { estado, incrementar }
}
}
Aqui, o estado
é reativo, e o watchEffect()
monitora todas as mudanças feitas em estado
e executa a função toda vez que qualquer propriedade muda.
✅ Conclusão
- O
watchEffect()
é útil quando você deseja reagir a todas as dependências reativas automaticamente dentro de uma função. - O
reactive()
transforma objetos em reativos, o que significa que suas propriedades também são automaticamente observadas. - Ambos são extremamente úteis para criar componentes e lógica de reatividade complexos de maneira simples e poderosa.
📌 Resumo rápido: watchEffect()
e reactive()
Funcionalidade | watchEffect() |
reactive() |
---|---|---|
O que é? | Observa todas as dependências reativas dentro da função. | Torna objetos e arrays reativos. |
Como funciona? | Executa a função toda vez que qualquer dependência reativa mudar. | Todas as propriedades de um objeto se tornam reativas. |
Necessita de retorno? | Não, o foco é a execução da função. | Não, você acessa diretamente as propriedades reativas. |