Buscar

Eventos no React: Diferenças e Aplicações

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PROGRAMAÇÃO 
FRONT END II 
Fabiano Berlinck Neumann
Eventos no React
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
 � Diferenciar eventos React e DOM.
 � Formular passagem de parâmetros para manipuladores de eventos.
 � Produzir aplicações usando eventos.
Introdução
Por mais que as regras de negócio de um sistema Web sejam processadas 
no lado do servidor, parte do código do sistema também precisa ser 
processada e apresentada no navegador escolhido pelo usuário, como 
no caso dos sites, na parte front end dos aplicativos de smartphones, 
tablets e smart TVs. Tal modelo é conhecido como cliente/servidor, em 
que, no geral, a estrutura da aplicação é distribuída para processamento 
e armazenamento de dados em ambos os lados.
Para que seja possível programar a interação adequada entre o usuário 
e a aplicação, tanto no âmbito da usabilidade quanto da experiência 
do usuário, é necessário conhecer os eventos e saber lidar com eles 
quando são disparados pelo projeto de front end, independentemente 
de linguagem de programação e das tecnologias utilizadas escolhidas.
Neste capítulo, você aprenderá sobre eventos React e DOM e suas 
principais diferenças, como funciona a passagem de parâmetros para 
os manipuladores de eventos, além de ver exemplos de aplicações que 
os utilizam.
Eventos React e DOM
Os eventos são ações ou ocorrências que acontecem nas aplicações e são 
informadas aos desenvolvedores para que possam ser respondidas da maneira 
esperada, como no caso de um botão em um site que, ao ser clicado, entre outras 
possibilidades, pode apresentar uma caixa de informação (INTRODUÇÃO..., 
2019, documento on-line).
Para que essas ações aconteçam, o programa aciona um sinal de deter-
minado tipo quando elas são ativadas e podem ser tratadas por mecanismos 
automatizados, programados pelo desenvolvedor front end. É possível imaginar 
um evento acontecendo em um aeroporto, quando a pista fica vazia para 
pouso e decolagem, e a torre informa ao piloto que o caminho está livre e lhe 
concede autorização, dando início ao movimento desejado com a aeronave 
em direção à pista.
No caso de sistemas Web, os eventos acontecem dentro dos navegadores 
e são vinculados a algum item específico dentro deles, como um elemento 
simples, um conjunto de elementos, um documento carregado em uma deter-
minada aba ou, até mesmo, toda a janela do navegador.
São diversos tipos de eventos que podem acontecer em uma aplicação, como:
 � controlar um vídeo com as funções de começar e parar; 
 � clicar em um elemento com o mouse ou passá-lo por ele; 
 � pressionar alguma tecla no teclado; 
 � preencher um formulário e enviá-lo para o sistema;
 � uma página que termina de carregar; 
 � um erro que pode ser verificado pelo programador no console.
Eventos DOM
Eventos DOM são enviados para notificar programaticamente o sistema de 
acontecimentos específicos (EVENT, 2019, documento on-line). Cada evento 
contém uma representação em um objeto que tem como base a interface Event 
e que pode ter campos e funções que disponibilizam informações adicionais 
sobre o ocorrido.
Além disso, eles afirmam que os eventos podem representar desde inte-
rações com os usuários até notificações automatizadas sobre acontecimentos 
na renderização, bem como ser tanto eventos-padrão definidos nas especifi-
cações oficiais quanto específicos para utilização interna em determinados 
navegadores.
Eventos no React2
Conheça os eventos e seus tipos no guia de referência do grupo de desenvolvedores 
da Mozilla, clicando no link a seguir.
https://qrgo.page.link/TqtDG
Para Kacmarcik e Leithead (2016), os eventos de interface do usuário 
herdam características e comportamentos dos objetos de evento do DOM, 
definidos na especificação oficial. Normalmente são implementados para 
gerenciar a interação com o usuário com entradas de interação com o mouse 
ou teclado e projetados com dois objetivos principais:
1. Projeto de um sistema de eventos que permita o registro de manipula-
dores de eventos e a descrição do fluxo do evento por meio da estrutura 
de árvore.
2. Fornecimento de um subconjunto comum dos sistemas de eventos atuais, 
utilizados nos navegadores escolhidos pelos usuários, possibilitando a 
interoperabilidade dos scripts e dos conteúdos (não é esperada a com-
patibilidade total desse objetivo com versões anteriores de navegadores 
e do DOM, mas as especificações visam a atender esse ponto sempre 
que possível).
A interface Event representa um evento que acontece dentro do DOM 
que, além de ser acionado por ações como clique no mouse ou teclado, pode 
ser gerado por application programming interface (APIs, em português in-
terface de programação para aplicativos), para representar o progresso de 
uma requisição assíncrona, quando a requisição não trava o processamento 
do restante da aplicação na espera da resposta. Também pode ser acionado 
programaticamente a partir de chamadas de métodos, como o click() de 
um objeto HTMLElement, ou enviados para um destino específico por meio 
do método dispatchEvent() do objeto EventTarget. 
São diversos os tipos de evento, sendo que alguns utilizam interfaces que 
são baseadas na interface Event principal para herdar suas características 
e seus comportamentos. A interface Event em si contém propriedades e 
métodos que são comuns a todos eventos.
3Eventos no React
Arquitetura de eventos DOM
Como visto anteriormente, aplicações podem disparar objetos do tipo evento 
por meio do método dispatchEvent(). Dessa forma, o objeto evento 
se propagará por toda árvore DOM, conforme determinado pelo fluxo de 
eventos DOM.
Mesmo assim, antes de o objeto ser enviado, é necessário determinar o 
caminho de propagação do objeto evento, que nada mais é do que uma lista de 
destinos pelos quais o evento deve passar e que refletem a estrutura hierárquica 
do documento da página Web. O último elemento da lista é o alvo do evento, 
assim como em uma árvore genealógica, o diretamente anterior é o objeto-pai, 
e todos os anteriores são seus ancestrais.
De acordo com Kacmarcik e Leithead (2016), com o caminho determinado, 
o objeto evento passa por uma ou mais fases do evento, que são: a de captura, 
de destino e da bolha, que podem ser puladas quando não suportadas ou se a 
propagação do objeto for cancelada. 
 � Fase de captura: o objeto parte desde a raiz da árvore até o nó-pai do 
objeto destino.
 � Fase de destino: o objeto evento chega ao nó destino. Caso o objeto 
chegue nessa fase e tenha a indicação de não borbulha, o evento será 
interrompido após essa fase.
 � Fase de bolha: (ou fase de borbulha) o objeto se propaga de volta à 
raiz do documento, do destino até seus ancestrais, em ordem reversa, 
começando com o nó-pai e indo até o nó window.
Os eventos podem ser cancelados, o comportamento que eles cancelam pode 
ser chamado de ação-padrão, e os objetos canceláveis podem ser associados 
com uma ou mais ações-padrão. Para cancelar um evento, é necessário chamar 
o método preventDefault().
Além disso, os eventos podem ser síncronos ou assíncronos, que repre-
sentam disparados um após o outro, aguardando a resposta do primeiro para 
enviar o segundo, ou simplesmente dados são enviados independentes de 
resposta. No caso dos eventos síncronos, nenhuma outra ação é tomada antes 
da resposta da ação do evento anterior. Já os eventos assíncronos podem ser 
disparados sempre que o resultado de uma ação for concluída, sem que haja 
relação entre eles e outros eventos.
Eventos no React4
Eventos React
Segundo a parte de manipulação de eventos da documentação oficial do 
React, manipular eventos em elementos React é muito similar à manipulação 
de eventos nos elementos DOM, com apenas algumas diferenças sintáticas, 
como pode ser observado nos exemplos a seguir.
Exemplo em HTML e JavaScript:
<button onclick="cadastrarUsuario()">
 Cadastrar
</button>
Exemplo em React:
<button onClick="{cadastrarUsuario}">
 Cadastrar
</button>
Nocaso do HTML/JavaScript o evento se chama onclick, enquanto 
no React o evento é escrito onClick, usando camel case, que significa que 
a primeira letra da segunda palavra em diante começa com letra maiúscula. 
Outra diferença é que, com o JSX, a função cadastrarUsuário é passada 
como manipulador de eventos, entre as chaves, ao invés de um texto.
Além disso, no React não é possível retornar false para evitar o com-
portamento-padrão do evento em determinado elemento, como é feito no caso 
do HTML a seguir.
<a href="#" onclick="alert('Link clicado!'); return false">
 Clique Aqui
</a>
5Eventos no React
No caso do React, é necessário chamar o método preventDefault 
explicitamente, como no seguinte caso.
function ActionLink() {
 function handleClick(e) {
 e.preventDefault();
 alert('Link clicado!');
 }
 return (
 <a href="#" onClick={handleClick}>
 Clique Aqui
 </a>
 );
}
Nesse exemplo em React, a letra “e” dentro do método handleClick() 
é um evento sintático de acordo com a especificação W3C, o que permite a 
compatibilidade entre os navegadores. 
Passagem de parâmetros para manipuladores 
de eventos
Cada um dos eventos disponíveis possui um manipulador de eventos — ou 
event handler, em inglês —, que é um trecho de código que costuma ser uma 
função definida pelo desenvolvedor e executado apenas quando o evento 
é acionado. Quando esse trecho de código é criado para ser executado em 
resposta a um evento disparado, é possível afirmar que o desenvolvedor 
está registrando um manipulador de eventos (MANIPULANDO..., 2019, 
documento on-line).
Algumas vezes, os manipuladores de eventos também são chamados de 
escutadores de eventos — ou event listeners, em inglês. Apesar de os nomes 
serem bastante parecidos, os escutadores ficam ouvindo os eventos que estão 
acontecendo, e os manipuladores são os trechos de código que são executados 
como resposta aos eventos, como no exemplo a seguir.
Eventos no React6
Trecho do código HTML:
<button> clique aqui </button>
Código em JavaScript:
var btn = document.querySelector('button');
btn.onclick = function() {
 alert('Botão clicado!');
}
Observa-se a variável btn armazena a referência ao botão por conta do 
método document.querySelector(). O trecho de código que segue é o 
manipulador do evento. A variável btn aponta para um elemento <button>, 
que contém diversos eventos que podem ser disparados a partir dele e tratados 
pelos manipuladores de eventos. Com o método onclick recebendo uma 
função que apresenta o alerta, o programa fica escutando o evento de clique 
no botão e apresentará o alerta sempre que o botão for clicado.
Muitos elementos DOM podem ser configurados para ouvir esses eventos 
e chamar funções para processamento como resposta a eles. Os manipuladores 
de eventos costumam ser vinculados a vários elementos HTML, a partir da 
utilização do método EventTarget.addEventListener(). Este recebe 
dois parâmetros: o primeiro é o nome do evento que o desenvolvedor deseja 
registrar para ser manipulado, e o segundo é a parte do código que deve ser 
executada como resposta ao evento registrado.
Entretanto, quando o desenvolvedor trabalha com React, não é necessário 
chamar o método addEventListener para adicionar ouvintes ao elemento 
DOM após a sua criação. Basta definir o ouvinte no momento inicial de ren-
derização do elemento. Além disso, se o componente for definido por meio 
da utilização de uma classe do ES6, é comum que a própria função na classe 
seja o manipulador de evento, conforme exemplo a seguir.
class ReactAlert extends React.Component {
...
 handleClick() {
 alert('Botão React Clicado!');
 }
7Eventos no React
 render() {
 return (
 <button onClick={this.handleClick}>
 Clicar
 </button>
 );
 }
...
}
Quando houver a necessidade de passar algum parâmetro extra para um 
manipulador de eventos, como no caso de uma estrutura de repetição em que 
pode ser necessário passar o identificador da linha para o evento, é preciso 
utilizar o conceito de arrow functions ou Function.prototype.bind, 
como nos exemplos a seguir, que fazem a mesma coisa:
<button onClick={(e) => this.deleteRow(id, e)}>Deletar linha</
button>
<button onClick={this.deleteRow.bind(this, id)}>Deletar linha</
button>
Como dito anteriormente, ambos os casos são equivalentes. No primeiro 
caso, o argumento "e" representa o evento do React que será passado como 
segundo parâmetro após a variável id, que representa o identificador da li-
nha. Já no segundo caso, o evento React também é passado juntamente com 
argumentos adicionais, mas agora de forma automática, graças ao bind que 
recebe o this e o id.
Outro exemplo que exige que o desenvolvedor passe parâmetros para os 
manipuladores de eventos é o caso do preenchimento e da submissão de um 
formulário em que o usuário registra seu nome. Elementos de formulário 
em HTML mantêm seu próprio estado e realizam a atualização de acordo 
com a entrada do usuário. Já no React, o estado é mutável e costuma ser 
mantido na propriedade state dos componentes, que pode ser atualizado 
por meio da função setState(), como pode ser observado no trecho de 
código a seguir.
Eventos no React8
handleChange(event) {
 this.setState({value: event.target.value});
}
render() {
 return (
 <form onSubmit={this.handleSubmit}>
 <label>
 Nome:
 <input type="text" value={this.state.value} 
onChange={this.handleChange} />
 </label>
 <input type="submit" value="Enviar" />
 </form>
 );
}
É possível observar que o atributo value é definido no <input> com 
this.state.value, de forma que o estado do React seja a fonte de controle 
do manipulador de eventos. Já o evento onChange do elemento <input> 
é vinculado ao método handleChange(). Ele será executado a cada tecla 
pressionada pelo usuário, de forma que, além de exibir o que está sendo 
digitado pelo usuário, o estado armazenará o valor do campo por meio do 
objeto event, passado automaticamente como parâmetro para a função 
handleChange().
Além disso, o componente React controla o que acontece no formulário 
em cada uma das entradas do usuário, além de renderizá-lo. Quando isso 
acontece, ele é chamado de componente controlado. Com isso, cada mutação 
de estado terá uma função de manipulação ou um manipulador de eventos 
associado.
9Eventos no React
Exemplos de aplicações
Como visto até o momento, com o React, os elementos de formulário, como 
o <input>, apresentam estado mutável e normalmente são mantidos na 
propriedade state dos componentes, contendo um manipulador de eventos 
associado a cada mutação de estado (FORMULÁRIOS, 2019, documento 
on-line).
No exemplo a seguir, baseado em exemplos do tópico de formulários da 
documentação oficial, é apresentado um formulário maior, em que é necessário 
manipular múltiplos eventos por meio dos componentes controlados. Para 
isso, é utilizado o atributo name para cada um desses elementos e o valor de 
event.target.name para tratá-los na função manipuladora de eventos.
class Confirmation extends React.Component {
 constructor(props) {
 super(props);
 this.state = {
 isConfirmed: true,
 numberOfPeople: 3
 };
 this.handleInputChange = this.handleInputChange.
bind(this);
 }
 handleInputChange(event) {
 const target = event.target;
 const value = target.type === 'checkbox' ? target.
checked : target.value;
 const name = target.name;
 this.setState({
 [name]: value
 });
 }
Eventos no React10
 render() {
 return (
 <form>
 <label>
 Confirmados:
 <input
 name="isConfirmed"
 type="checkbox"
 checked={this.state.isConfirmed}onChange={this.handleInputChange} />
 </label>
 <br />
 <label>
 Número de pessoas:
 <input
 name="numberOfPeople"
 type="number"
 value={this.state.numberOfPeople}
 onChange={this.handleInputChange} />
 </label>
 </form>
 );
 }
}
Nesse caso, a função manipuladora de eventos é a handleInputChange, 
que recebe o objeto event como parâmetro e, com isso, consegue acessar a 
propriedade target do evento para conhecer o componente que realizou o seu 
disparo, bem como o atributo name, que é utilizado para saber a propriedade 
do estado que será atualizada dentro do método this.setState().
Para encontrar mais exemplos, desde a instalação até os pontos mais avançados, como 
outros tipos de elementos e seus respectivos manipuladores de eventos, é possível 
acessar a documentação oficial do React no link a seguir.
https://qrgo.page.link/UJnaq
11Eventos no React
EVENT. MDN Web Docs, Mountain View, 2019. Disponível em: https://developer.mozilla.
org/pt-BR/docs/Web/API/Event. Acesso em: 24 out. 2019.
FORMULÁRIOS. React/Facebook Open Source, [S. l.], 2019. Disponível em: https://pt-br.
reactjs.org/docs/forms.html. Acesso em: 24 out. 2019.
INTRODUÇÃO a eventos. MDN Web Docs, Mountain View, 2019. Disponível em: https://
developer.mozilla.org/pt-BR/docs/Aprender/JavaScript/Elementos_construtivos/Events. 
Acesso em: 24 out. 2019.
KACMARCIK, G.; LEITHEAD, T. UI Events: W3C Working Draft. Cambridge; Sophia-Antipolis; 
Minato; Beijing: World Wide Web Consortium, 4 Aug. 2016. Disponível em: https://www.
w3.org/TR/DOM-Level-3-Events/#event-flow. Acesso em: 24 out. 2019.
MANIPULANDO eventos. React/Facebook Open Source, [S. l.], 2019. Disponível em: https://
pt-br.reactjs.org/docs/handling-events.html. Acesso em: 24 out. 2019.
Leituras recomendadas
EVENT reference. MDN Web Docs, Mountain View, 2019. Disponível em: https://developer.
mozilla.org/pt-BR/docs/Web/Events. Acesso em: 24 out. 2019.
INTRODUÇÃO. React/Facebook Open Source, [S. l.], 2019. Disponível em: https://pt-br.
reactjs.org/docs/getting-started.html. Acesso em: 24 out. 2019.
Eventos no React12

Continue navegando

Outros materiais