effectScope() Gerenciar em lote escopos de efeitos colaterais

Última atualização: 2026-10-22

effectScope() Gerenciar em lote escopos de efeitos colaterais

effectScope() cria um escopo que reúne vários observadores/propriedades computadas para iniciar e parar em conjunto, evitando gerenciar funções stop uma a uma.

GrupoReatividade: Avançado
TipoAPI
EscopoNo Componente
Versão do Vue3.0+
Suporte a SSRSim

📝 Sintaxe

const scope = effectScope()
scope.run(() => {
  watch(a, fn)
  watchEffect(fn2)
})
scope.stop()   // para todos os efeitos do escopo de uma vez

⚙️ Argumentos

detachedtrue se desconecta do escopo pai (padrão false, para junto com o pai)

Retorno:Objeto de escopo: run(cb) / stop() / on() / off() / pause() / resume()

▶ Exemplo

Edite o código abaixo e veja o resultado ao vivo:

Saída:

Both logs follow changes until stopAll() is clicked, then neither updates.

💡 Pontos-chave

💡 Dica Use-o ao escrever composables: quem chama recebe apenas um handle stop/escopo para destruir tudo de uma vez.
ℹ️ Nota Dentro de componentes, o padrão é pendurar no escopo do componente; detached: true permite sobreviver de forma independente aos componentes.
⚠️ Aviso O computed/watch dentro do escopo só é incorporado se criado enquanto o scope está em execução.
Mais casos em breve.

📚 Tutoriais Relacionados

❓ FAQ

P Sem ele não dá?
R Para um único observador, o stop retornado basta; ao gerenciar muitos efeitos colaterais em grupo, ele reduz significativamente o código repetitivo.
P Onde usar detached?
R Gestão de estado que precisa atravessar o ciclo de vida dos componentes (como o interno do Pinia) usa esse recurso.
P Dá para pausar?
R 3.4+ oferece pause()/resume(), que suspendem temporariamente todos os efeitos colaterais do escopo.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%