Ciclo de Vida Full-Stack

Métodos de ciclo de vida são funções nomeadas de forma especial que você pode declarar na classe.

Cada método de ciclo de vida roda em uma fila de ordem específica, garantindo que todos os componentes do ciclo atual sejam preparados antes do primeiro ser iniciado.

Prepare

Esse método é bloqueante e roda antes da primeira renderização do componente.

Você pode usar essa função para definir o estado que o usuário verá antes do carregamento.

Se o usuário estiver entrando através dessa rota, prepare irá rodar no servidor antes do Nullstack renderizar sua aplicação no lado do servidor.

Se o usuário estiver navegando por outra rota, esse método rodará no cliente.

import Nullstack from 'nullstack';

class Component extends Nullstack {

  // ...

  prepare() {
    this.date = new Date();
  }

  // ...

}

export default Component;

Initiate

Esse método pode ser assíncrono, e roda assim que o componente for preparado e renderizado pela primeira vez.

Você pode usá-lo para invocar outra função do servidor e carregar os dados para apresentar a página.

Se o usuário estiver entrando através dessa rota, initiate rodará no servidor.

Nullstack irá esperar até que a promise seja resolvida e então finalmente irá gerar o HTML que será servido.

Se o usuário estiver navegando por outra rota, esse método rodará no cliente.

import Nullstack from 'nullstack';

class Component extends Nullstack {

  // ...

  async initiate() {
    this.task = await getTaskByDay({
      day: this.date
    });
  }

  // ...

}

export default Component;

✨ Aprenda mais sobre funções do servidor.

Hydrate

Esse método é assíncrono e rodará apenas no cliente.

Ele sempre rodará independente do ambiente que iniciou o componente.

Esse é um bom lugar para acionar dependências que manipulam o DOM ou que podem rodar apenas no lado do cliente.

import Nullstack from 'nullstack';

class Component extends Nullstack {

  // ...

  async hydrate() {
    this.timer = setInterval(() => {
      console.log(this.date);
    }, 1000);
  }

  // ...

}

export default Component;

Update

Esse método é assíncrono e rodará apenas no cliente.

Ele roda em todos os componentes sempre que o estado da aplicação mudar.

🔥 Tome cuidado para não causar loops infinitos quando mutacionar o estado dentro de update.

Ele irá rodar logo antes da renderização, mas não irá bloquear a fila.

A função update não rodará até que a aplicação seja renderizada após initiate.

import Nullstack from 'nullstack';

class Component extends Nullstack {

  // ...

  async update() {
    const today = new Date();
    if(today.getDay() != this.date.getDay()) {
      this.date = today;
      await this.initiate();
    }
  }

  // ...

}

export default Component;

✨ Métodos de ciclo de vida não têm efeitos colaterais, você pode chamá-los manualmentes sem causar problemas.

Terminate

Esse método é assíncrono e rodará apenas no cliente.

Ele irá rodar após o componente deixar o DOM.

Esse é o lugar para limpar qualquer coisa que você definiu no método hydrate.

Essa instância será levada pelo garbage collector após a resolução da Promise.

import Nullstack from 'nullstack';

class Component extends Nullstack {

  // ...

  async terminate() {
    clearInterval(this.timer);
  }

  // ...

}

export default Component;

Próximos passos

⚔ Aprenda sobre funções do servidor.