# Gatilhos de Ciclo de vida
Dica
Todos os gatilhos de ciclo de vida têm seu contexto this vinculado automaticamente à instância, de forma que você pode acessar dados, dados computados e métodos. Isso significa que você não deve usar uma arrow function para definir um método de ciclo de vida (exemplo: created: () => this.fetchTodos()). A justificativa é que arrow functions vinculam o contexto pai, então o this não será a instância que você espera e o this.fetchTodos será undefined.
# beforeCreate
Tipo:
FunctionDetalhes:
Invocado sincronamente logo após a instância ser inicializada, antes da observação dos dados e configuração de eventos/observadores.
Ver também: Diagrama de ciclo de vida
# created
Tipo:
FunctionDetalhes:
Invocado sincronamente após a instância ser criada. Nesse estágio, a instância finalizou o processamento das opções, o que significa que a observação de dados, dados computados, métodos e callbacks de observadores/eventos foram inicializados. Entretanto, a fase de montagem não foi iniciada, e a propriedade
$elnão estará disponível ainda.Ver também: Diagrama de ciclo de vida
# beforeMount
Tipo:
FunctionDetalhes:
Invocado logo antes de a montagem iniciar: a função
renderestá prestes a ser invocada pela primeira vez.Esse gatilho não é invocado durante a renderização do lado do servidor.
Ver também: Diagrama de ciclo de vida
# mounted
Tipo:
FunctionDetalhes:
Invocado após a instância ser montada, onde
el, passado para oapp.mount, é substituído pelo recém criadovm.$el. Se a instância raiz for montada em um elemento presente no documento,vm.$eltambém estará no documento quando omountedfor invocado.Perceba que o
mountednão garante que todos componentes filhos também foram montados. Se você quiser esperar até que toda a view tenha sido renderizada, você pode usar o vm.$nextTick dentro domounted:mounted() { this.$nextTick(function () { // Código que só será executado depois // de a view inteira ter sido renderizada }) }1
2
3
4
5
6Esse gatilho não é invocado durante a renderização do lado do servidor.
Ver também: Diagrama de ciclo de vida
# beforeUpdate
Tipo:
FunctionDetalhes:
Invocado quando há mudança nos dados e antes de o DOM ser atualizado. Esse é um bom momento para acessar a DOM existente antes de uma atualização, por exemplo, para remover escutas de evento adicionadas manualmente.
Esse gatilho não é invocado durante a renderização do lado do servidor, porque apenas a renderização inicial é realizada do lado do servidor.
Ver também: Diagrama de ciclo de vida
# updated
Tipo:
FunctionDetalhes:
Invocado após uma mudança nos dados causar uma re-renderização do DOM.
O DOM do componente terá sido atualizado quando esse gatilho for invocado, de forma que você pode realizar operações dependentes do DOM neste gatilho. Entretanto, na maioria dos casos você deve evitar mudanças de estado dentro do gatilho. Para reagir à mudanças de estado, normalmente é melhor usar uma dado computado ou um observador.
Perceba que o
updatednão garante que todos componentes filhos foram também re-renderizados. Se você quiser esperar até que toda view tenha sido re-renderizada, você pode usar o vm.$nextTick dentro doupdated:updated() { this.$nextTick(function () { // Código que só será executado depois // de a view inteira ter sido re-renderizada }) }1
2
3
4
5
6Esse gatilho não é invocado durante a renderização do lado do servidor.
Ver também: Diagrama de ciclo de vida
# activated
Tipo:
FunctionDetalhes:
Invocada quando um componente kept-alive é ativado.
Esse gatilho não é invocado durante a renderização do lado do servidor.
Ver também:
# deactivated
Tipo:
FunctionDetalhes:
Invocada quando um componente kept-alive é desativado.
Esse gatilho não é invocado durante a renderização do lado do servidor.
Ver também:
# beforeUnmount
Tipo:
FunctionDetalhes:
Invocada logo antes de uma instância ser desmontada. Nesse estágio, a instância ainda é totalmente funcional.
Esse gatilho não é invocado durante a renderização do lado do servidor.
Ver também: Diagrama de ciclo de vida
# unmounted
Tipo:
FunctionDetalhes:
Invocada após uma instância ser desmontada. Quando esse gatilho é invocado, todas as diretivas da instância já foram desligadas, todas as escutas de evento foram removidas e todas as instâncias de componentes filhos também foram desmontadas.
Esse gatilho não é invocado durante a renderização do lado do servidor.
Ver também: Diagrama de ciclo de vida
# errorCaptured
Tipo:
(err: Error, instance: Component, info: string) => ?booleanDetalhes:
Invocada quando um erro de qualquer componente descendente foi capturado. O gatilho recebe três argumentos: o erro, a instância que desencadeou o erro e uma string contendo informações sobre onde o erro foi capturado. O gatilho pode retornar
falsepara impedir que o erro continue a ser propagado.Dica
Você pode modificar o estado de um componente nesse gatilho. Entretanto, é importante possuir condicionais em seu template ou função
renderque bloqueiem outras mudanças quando um erro for capturado; caso contrário, o componente entrará em um loop de renderização infinito.Regras de Propagação de Erro
Por padrão, todos os erros são enviados ao
config.errorHandlerglobal caso esteja definido, de forma que esses erros possam ainda ser reportados para um serviço de analytics em um lugar só.Caso existam vários gatilhos
errorCapturedna cadeia de herança de um componente ou na cadeia do componente pai, todos eles serão invocados no mesmo erro.Caso o próprio gatilho
errorCapturedlance um erro, tanto este erro quanto o que foi capturado originalmente serão enviados aoconfig.errorHandler.Um gatilho
errorCapturedpode retornarfalsepara prevenir que o erro seja propagado, o que basicamente equivale à dizer que "o erro foi tratado e deve ser ignorado". Isso previne que outros gatilhoserrorCapturedou que oconfig.errorHandlersejam invocados para o erro.
# renderTracked
Tipo:
(e: DebuggerEvent) => voidDetalhes:
Invocado quando a re-renderização do DOM é monitorada. O gatilho recebe um evento de depuração como argumento. Esse evento informa que operação monitorou o componente, o objeto alvo e a chave da operação.
Uso:
<div id="app"> <button v-on:click="addToCart">Adicionar no carrinho</button> <p>Carrinho({{ cart }})</p> </div>1
2
3
4const app = createApp({ data() { return { cart: 0 } }, renderTracked({ key, target, type }) { console.log({ key, target, type }) /* Isso será exibido quando o componente for renderizado pela primeira vez: { key: "cart", target: { cart: 0 }, type: "get" } */ }, methods: { addToCart() { this.cart += 1 } } }) app.mount('#app')1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# renderTriggered
Tipo:
(e: DebuggerEvent) => voidDetalhes:
Invocado quando a re-renderização do DOM é disparada. De forma similar ao
renderTracked, ele recebe um evento de depuração como argumento. Esse evento informa que operação disparou a re-renderização, o objeto alvo e a chave da operação.Uso:
<div id="app"> <button v-on:click="addToCart">Adicionar no carrinho</button> <p>Carrinho({{ cart }})</p> </div>1
2
3
4const app = createApp({ data() { return { cart: 0 } }, renderTriggered({ key, target, type }) { console.log({ key, target, type }) }, methods: { addToCart() { this.cart += 1 /* Isso invocará o renderTriggered { key: "cart", target: { cart: 1 }, type: "set" } */ } } }) app.mount('#app')1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26