2
respostas

Event is deprecated

Pelo que percebi não é adequando usar o event desta forma como trata-lo de forma correta seguindo o visto em aula? Mantenho a função original com o event no Adiciona?

Outra dúvida: Não seria melhor ao clicar no botão incluir limpar os dados dos forms? e a inclusão em branco não ser permitida? - pois se o usuario clicar duas vezes não vai conseguir incluir informação, logo a requisição não será feita.

export function throtte (milissegundos = 500){
    return function(target:any, propertyKey:string, descriptor: PropertyDescriptor){
        const metodoOriginal = descriptor.value;
        let timer = 0;

        descriptor.value = function (...args: any []){
            if(event) event.preventDefault();
            clearInterval(timer);
            timer = setTimeout(()=> metodoOriginal.apply(this, args), milissegundos);
        }

        return descriptor;
    }
}
2 respostas

Fala ai Tiago, tudo bem? Vamos lá:

Pelo que percebi não é adequando usar o event desta forma como trata-lo de forma correta seguindo o visto em aula? Mantenho a função original com o event no Adiciona?

Antigamente a gente utilizara o event global da window do JavaScript, mas, isso não é mais recomendável, o ideal é que a função vinculada a um evento do navegador receba como parâmetro o event.

Não seria melhor ao clicar no botão incluir limpar os dados dos forms? e a inclusão em branco não ser permitida? - pois se o usuario clicar duas vezes não vai conseguir incluir informação, logo a requisição não será feita.

Dizer "melhor" é complicado, depende do contexto, mas, eu diria que é uma outra abordagem e possibilidade de experiência da tela.

Espero ter ajudado.

Oi, Thiago! Tudo bem? Bem como disse o Matheus na resposta acima, o event global não é recomendado, pra contornar esse problema, eu fiz um casting do primeiro elemento do array args da função do decorator, pra ela se comportar como um Event:

descriptor.value = function(...args: any[]) {
  const event = <Event>args[0];

  if (event && event.preventDefault) {
    event.preventDefault();
  }

  clearTimeout(timer);

  timer = setTimeout(metodo.bind(this, ...args), timeout)
}

Espero que ajude! Abraços!