"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Nível sênior: Tratamento de eventos no React

Nível sênior: Tratamento de eventos no React

Publicado em 31/07/2024
Navegar:725

Senior level: Handling Events in React

Como desenvolvedor sênior, espera-se que você tenha um conhecimento profundo do tratamento de eventos no React. Isso envolve não apenas conhecer o básico, mas também dominar técnicas avançadas para criar aplicativos eficientes, sustentáveis ​​e escaláveis. Este artigo aborda os meandros do tratamento de eventos no React, incluindo adição de manipuladores de eventos, compreensão de eventos sintéticos, passagem de argumentos para manipuladores de eventos, criação de eventos personalizados e aproveitamento da delegação de eventos.

Manipulação de eventos

Adicionando manipuladores de eventos em JSX

Adicionar manipuladores de eventos em JSX é simples e semelhante ao tratamento de eventos em HTML normal, mas com algumas diferenças importantes devido à arquitetura exclusiva do React.

Exemplo de adição de um manipulador de eventos:

import React from 'react';

const handleClick = () => {
  console.log('Button clicked!');
};

const App = () => {
  return (
    
); }; export default App;

Neste exemplo, a função handleClick é chamada sempre que o botão é clicado. O atributo onClick em JSX é usado para especificar o manipulador de eventos.

Eventos Sintéticos

React usa um sistema chamado eventos sintéticos para lidar com eventos. Os eventos sintéticos são um wrapper entre navegadores em torno do sistema de eventos nativo do navegador. Isso garante que os eventos se comportem de forma consistente em diferentes navegadores, fornecendo uma API unificada.

Exemplo de evento sintético:

import React from 'react';

const handleInputChange = (event) => {
  console.log('Input value:', event.target.value);
};

const App = () => {
  return (
    
); }; export default App;

Neste exemplo, a função handleInputChange registra o valor do campo de entrada sempre que ele muda. O parâmetro event é um evento sintético que fornece propriedades de evento consistentes em todos os navegadores.

Passando argumentos para manipuladores de eventos

A passagem de argumentos para manipuladores de eventos pode ser feita usando uma função de seta ou o método bind, que é crucial para lidar com eventos de uma forma mais flexível.

Exemplo usando uma função de seta:

import React from 'react';

const handleClick = (message) => {
  console.log(message);
};

const App = () => {
  return (
    
); }; export default App;

Exemplo usando o método bind:

import React from 'react';

const handleClick = (message) => {
  console.log(message);
};

const App = () => {
  return (
    
); }; export default App;

Ambos os métodos permitem que você passe argumentos adicionais para a função handleClick, proporcionando flexibilidade no tratamento de eventos.

Tratamento de eventos personalizados

Criando eventos personalizados

A criação de eventos personalizados no React é necessária para interações mais complexas que não são cobertas por eventos padrão. Eventos personalizados podem ser criados e despachados usando o construtor CustomEvent e o método dispatchEvent.

Exemplo de criação e envio de um evento personalizado:

import React, { useEffect, useRef } from 'react';

const CustomEventComponent = () => {
  const buttonRef = useRef(null);

  useEffect(() => {
    const handleCustomEvent = (event) => {
      console.log(event.detail.message);
    };

    const button = buttonRef.current;
    button.addEventListener('customEvent', handleCustomEvent);

    return () => {
      button.removeEventListener('customEvent', handleCustomEvent);
    };
  }, []);

  const handleClick = () => {
    const customEvent = new CustomEvent('customEvent', {
      detail: { message: 'Custom event triggered!' },
    });
    buttonRef.current.dispatchEvent(customEvent);
  };

  return (
    
  );
};

export default CustomEventComponent;

Neste exemplo, um evento personalizado chamado customEvent é criado e despachado quando o botão é clicado. O manipulador de eventos escuta o evento personalizado e registra a mensagem detalhada do evento.

Delegação de eventos em React

Delegação de eventos é uma técnica em que um único ouvinte de evento é usado para gerenciar eventos para vários elementos. Isto é especialmente útil para gerenciar eventos de forma eficiente em listas ou tabelas.

Exemplo de delegação de evento:

import React from 'react';

const handleClick = (event) => {
  if (event.target.tagName === 'BUTTON') {
    console.log(`Button ${event.target.textContent} clicked!`);
  }
};

const App = () => {
  return (
    
); }; export default App;

Neste exemplo, um único manipulador de eventos no elemento div gerencia eventos de clique para todos os botões. O manipulador de eventos verifica event.target para determinar qual botão foi clicado e registra uma mensagem de acordo.

Melhores práticas para manipulação de eventos no React

  1. Evite a criação de funções inline em JSX: A criação de novas funções dentro do método de renderização pode levar a novas renderizações desnecessárias e problemas de desempenho. Em vez disso, defina manipuladores de eventos como métodos de classe ou use ganchos.
   const App = () => {
     const handleClick = () => {
       console.log('Button clicked!');
     };

     return (
       
); };
  1. Prevenir comportamento padrão e interromper a propagação: Use event.preventDefault() para evitar o comportamento padrão e event.stopPropagation() para interromper a propagação de eventos quando necessário.
   const handleSubmit = (event) => {
     event.preventDefault();
     // Handle form submission
   };

   return 
...
;
  1. Limpar ouvintes de eventos: Ao adicionar ouvintes de eventos diretamente aos elementos DOM, certifique-se de limpá-los para evitar vazamentos de memória.
   useEffect(() => {
     const handleResize = () => {
       console.log('Window resized');
     };

     window.addEventListener('resize', handleResize);

     return () => {
       window.removeEventListener('resize', handleResize);
     };
   }, []);
  1. Debounce ou aceleração de eventos de alta frequência: Use técnicas de debounce ou aceleração para eventos de alta frequência, como rolagem ou redimensionamento, para melhorar o desempenho.
   const debounce = (func, delay) => {
     let timeoutId;
     return (...args) => {
       clearTimeout(timeoutId);
       timeoutId = setTimeout(() => {
         func.apply(null, args);
       }, delay);
     };
   };

   useEffect(() => {
     const handleScroll = debounce(() => {
       console.log('Scroll event');
     }, 300);

     window.addEventListener('scroll', handleScroll);

     return () => {
       window.removeEventListener('scroll', handleScroll);
     };
   }, []);
  1. Use a delegação de eventos com sabedoria: Aproveite a delegação de eventos para elementos que são adicionados ou removidos dinamicamente do DOM, como listas de itens.
   const List = () => {
     const handleClick = (event) => {
       if (event.target.tagName === 'LI') {
         console.log(`Item ${event.target.textContent} clicked!`);
       }
     };

     return (
       
  • Item 1
  • Item 2
  • Item 3
); };

Conclusão

O tratamento eficiente de eventos no React é crucial para a criação de aplicações interativas e de alto desempenho. Ao dominar as técnicas de adição de manipuladores de eventos, uso de eventos sintéticos, passagem de argumentos para manipuladores de eventos, criação de eventos personalizados e aproveitamento da delegação de eventos, você pode criar aplicativos robustos e escaláveis. A implementação das práticas recomendadas garante que seu código permaneça sustentável e com bom desempenho à medida que cresce em complexidade. Como desenvolvedor sênior, sua capacidade de utilizar essas técnicas avançadas contribuirá significativamente para o sucesso de seus projetos e a eficácia de sua equipe.

Declaração de lançamento Este artigo está reproduzido em: https://dev.to/david_zamoraballesteros_/senior-level-handling-events-in-react-9h8?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3