SlideShare a Scribd company logo
1 of 39
Download to read offline
React
React-Router, Context,
Developer Tools e Hooks
Bruno Catão
Antes de Tudo
• Vamos falar sobre o problema do this / bind
• Também vamos falar sobre um componente React obrigatoriamente
ter apenas um elemento filho
Problema do this / bind
• JavaScript é uma linguagem funcional !
• O objeto this referencia o contexto de quem chama uma função e não
de quem criou a função
• Ex:
Loja
------------------------
produtos: []
------------------------
comprar(produto)
DetalheProduto
------------------------
produto: {}
------------------------
onClick( )
<DetalheProduto
produto={p}
onComprar={this.comprar} />
onClick={() =>
this.props.onComprar(p)}
comprar(p) {
this.produtos.push(p);
}
Problema do this / bind
• Soluções:
• Passar o valor do this como parâmetro (ô solução feia !)
• var that = this;
• chamaFuncaoComCallback(that, callback);
• // No callback usa "that" ao invés de this
• Fixar o valor do this usando o bind (é menos feia, mas ocupa muito espaço)
• function minhaFuncao() { ... }
• minhaFuncao = minhaFuncao.bind(this);
• Usar as arrow functions (vem com bind automático)
• minhaFuncao = ( ) => { ... }
Problema de Apenas um Filho
• Isso não pode:
return (
<h1>Um elemento</h1>
<p>Outro elemento</p>
);
• Solução tradicional (feia):
return (
<div>
<h1>Um elemento</h1>
<p>Outro elemento</p>
</div>
);
• React.Fragment (quase bom):
return (
<React.Fragment>
<h1>Um elemento</h1>
<p>Outro elemento</p>
</React.Fragment>
);
• Elemento vazio (agora sim !)
return (
<>
<h1>Um elemento</h1>
<p>Outro elemento</p>
</>
);
Roteamento (finalmente)
Roteamento
• "Definição": é uma forma de mudar os componentes exibidos na
página a partir de padrões de URL (rotas);
• Para tanto, precisamos instalar um pacote "React Router"
create-react-app teste-rotas
cd teste-rotas
npm i --save react-router-dom
code .
Projeto de Exemplo
• Vamos criar alguns componentes básicos que podem ser acessados
com os seguintes padrões de URL
Componente URL
Principal /
ListaDeProdutos /produtos
DetalheProduto /produtos/ID_PRODUTO
PaginaNaoEncontrada QQ_OUTRA_URL
Configuração das Rotas
Componentes
Resultado
Navegando entre os componentes
Context
Qual é o problema ?
• Ter que passar valores em muitos níveis (props e callbacks)
• Acoplamento entre componentes
• Solução:
• Criar um contexto
• Um contexto armazena um objeto chamado value
• Esse objeto pode conter valores e funções
• Qual aplicado em um componente, o valor do contexto está disponível nele e
em seus filhos
Context
• Criando um Context:
var MeuContexto = React.createContext( );
• Atribuindo o value do context:
<MeuContexto.Provider value={QQ_COISA} >
ELEMENTOS QUE VÃO RECEBER O CONTEXTO
</MeuContexto.Provider>
Consumindo os valores do Context
• Consumer:
• Ex. MeuContext.Consumer
• Faz sentido, se o valor é atribuído com Provider, ele é lido com Consumer
• Ex:
<MeuContext.Consumer>
{ (context) => ACESSA AQUI OS VALORES QUE ESTÃO NO VALUE }
</MeuContext.Consumer>
• contextType:
• Ex: Componente.contextType = MeuContext;
• Injeta o context no componente, aí é só acessar (this.context)
React Developer Tools
Extensão para o Chrome
Hooks (introdução)
esse tema ainda vai continuar
Hooks
• Novo meio para declarar e manipular o estado de componentes
• Utilizados em Function Components:
useState
• Facilita a definição de propriedades de estado e seus respectivos
métodos modificadores
• Sintaxe:
• const [propriedade, setPropriedade] = useState(VALOR_INICIAL)
Motivação
• Function Components e Hooks são meios para simplificar a criação de
componentes
• A retrocompatibilidade é mantida
• Class Components continuam sendo suportados (ainda são o jeito
padrão de utilizar componentes)
• Próximos passos:
• Ciclo de vida dos componentes (Class e Function)
• Requisições AJAX (fetch)
• async / await
Atividade
• Individual
• Prazo: 21/03/2019
• O que fazer:
• Adicionar rotas à loja:
• todos os produtos, detalhe de um produto, registro e login
• O registro e o login ainda não precisam estar funcionando (preciso só dos
formulários e das rotas)
• Como entregar:
• O link do repositório deverá ser enviado para a atividade no classroom da
disciplina

More Related Content

Similar to React JS - Parte 2

Curso de Ruby on Rails - Aula 02
Curso de Ruby on Rails - Aula 02Curso de Ruby on Rails - Aula 02
Curso de Ruby on Rails - Aula 02Maurício Linhares
 
SelectionTracker Para Seleção de Itens no RecyclerView Android
SelectionTracker Para Seleção de Itens no RecyclerView AndroidSelectionTracker Para Seleção de Itens no RecyclerView Android
SelectionTracker Para Seleção de Itens no RecyclerView AndroidVinícius Thiengo
 
Workshop Mundo Senai - Hello, Angular.js
Workshop Mundo Senai - Hello, Angular.jsWorkshop Mundo Senai - Hello, Angular.js
Workshop Mundo Senai - Hello, Angular.jsFábio Elísio
 
Workshop React Hooks
Workshop React HooksWorkshop React Hooks
Workshop React HooksDan Vitoriano
 
Desenvolvimento em .Net - nHibernate
Desenvolvimento em .Net - nHibernateDesenvolvimento em .Net - nHibernate
Desenvolvimento em .Net - nHibernateVitor Silva
 
React - Compartilhando estado entre componentes
React - Compartilhando estado entre componentesReact - Compartilhando estado entre componentes
React - Compartilhando estado entre componentesJefferson Mariano de Souza
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Marcelo Rodrigues
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETslides_teltools
 
365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 Overview365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 OverviewAlexsandro Almeida
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de testeMarcos Pessoa
 
Android 02 - Recycler View Adapter
Android 02 - Recycler View AdapterAndroid 02 - Recycler View Adapter
Android 02 - Recycler View AdapterAline Borges
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPMarcelo Andrade
 
Data Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI AndroidData Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI AndroidVinícius Thiengo
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Frameworkelliando dias
 

Similar to React JS - Parte 2 (20)

React js
React js React js
React js
 
Curso de Ruby on Rails - Aula 02
Curso de Ruby on Rails - Aula 02Curso de Ruby on Rails - Aula 02
Curso de Ruby on Rails - Aula 02
 
SelectionTracker Para Seleção de Itens no RecyclerView Android
SelectionTracker Para Seleção de Itens no RecyclerView AndroidSelectionTracker Para Seleção de Itens no RecyclerView Android
SelectionTracker Para Seleção de Itens no RecyclerView Android
 
Workshop Mundo Senai - Hello, Angular.js
Workshop Mundo Senai - Hello, Angular.jsWorkshop Mundo Senai - Hello, Angular.js
Workshop Mundo Senai - Hello, Angular.js
 
Workshop React Hooks
Workshop React HooksWorkshop React Hooks
Workshop React Hooks
 
Angular 2
Angular 2Angular 2
Angular 2
 
Desenvolvimento em .Net - nHibernate
Desenvolvimento em .Net - nHibernateDesenvolvimento em .Net - nHibernate
Desenvolvimento em .Net - nHibernate
 
React - Compartilhando estado entre componentes
React - Compartilhando estado entre componentesReact - Compartilhando estado entre componentes
React - Compartilhando estado entre componentes
 
Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5Rapid Application Development com Tapestry 5
Rapid Application Development com Tapestry 5
 
PDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NETPDC - Engenharia - Plataforma Microsoft .NET
PDC - Engenharia - Plataforma Microsoft .NET
 
Refactoring - Design no Código
Refactoring - Design no CódigoRefactoring - Design no Código
Refactoring - Design no Código
 
365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 Overview365on Lab Asp.Net MVC Fundamentos 01 Overview
365on Lab Asp.Net MVC Fundamentos 01 Overview
 
Ferramentas de automação de teste
Ferramentas de automação de testeFerramentas de automação de teste
Ferramentas de automação de teste
 
Android 02 - Recycler View Adapter
Android 02 - Recycler View AdapterAndroid 02 - Recycler View Adapter
Android 02 - Recycler View Adapter
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHP
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
React Native na globo.com
React Native na globo.comReact Native na globo.com
React Native na globo.com
 
Data Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI AndroidData Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI Android
 
Mare de Agilidade - BDD e TDD
Mare de Agilidade - BDD e TDDMare de Agilidade - BDD e TDD
Mare de Agilidade - BDD e TDD
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 

More from Bruno Catão

More from Bruno Catão (20)

Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2
 
Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2
 
Node JS - Parte 4
Node JS - Parte 4Node JS - Parte 4
Node JS - Parte 4
 
Node JS - Parte 3
Node JS - Parte 3Node JS - Parte 3
Node JS - Parte 3
 
Node JS - Parte 2
Node JS - Parte 2Node JS - Parte 2
Node JS - Parte 2
 
Node JS - Parte 1
Node JS - Parte 1Node JS - Parte 1
Node JS - Parte 1
 
Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + Firebase
 
Retina e Retinose Pigmentar
Retina e Retinose PigmentarRetina e Retinose Pigmentar
Retina e Retinose Pigmentar
 
Mean Stack
Mean StackMean Stack
Mean Stack
 
Angular js
Angular jsAngular js
Angular js
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
Web Offline
Web OfflineWeb Offline
Web Offline
 
Python 08
Python 08Python 08
Python 08
 
Python 07
Python 07Python 07
Python 07
 
Python 06
Python 06Python 06
Python 06
 
Python 05
Python 05Python 05
Python 05
 
Python 04
Python 04Python 04
Python 04
 
Python 03
Python 03Python 03
Python 03
 
Python 02
Python 02Python 02
Python 02
 
Python 01
Python 01Python 01
Python 01
 

React JS - Parte 2

  • 2. Antes de Tudo • Vamos falar sobre o problema do this / bind • Também vamos falar sobre um componente React obrigatoriamente ter apenas um elemento filho
  • 3. Problema do this / bind • JavaScript é uma linguagem funcional ! • O objeto this referencia o contexto de quem chama uma função e não de quem criou a função • Ex: Loja ------------------------ produtos: [] ------------------------ comprar(produto) DetalheProduto ------------------------ produto: {} ------------------------ onClick( ) <DetalheProduto produto={p} onComprar={this.comprar} /> onClick={() => this.props.onComprar(p)} comprar(p) { this.produtos.push(p); }
  • 4. Problema do this / bind • Soluções: • Passar o valor do this como parâmetro (ô solução feia !) • var that = this; • chamaFuncaoComCallback(that, callback); • // No callback usa "that" ao invés de this • Fixar o valor do this usando o bind (é menos feia, mas ocupa muito espaço) • function minhaFuncao() { ... } • minhaFuncao = minhaFuncao.bind(this); • Usar as arrow functions (vem com bind automático) • minhaFuncao = ( ) => { ... }
  • 5. Problema de Apenas um Filho • Isso não pode: return ( <h1>Um elemento</h1> <p>Outro elemento</p> ); • Solução tradicional (feia): return ( <div> <h1>Um elemento</h1> <p>Outro elemento</p> </div> ); • React.Fragment (quase bom): return ( <React.Fragment> <h1>Um elemento</h1> <p>Outro elemento</p> </React.Fragment> ); • Elemento vazio (agora sim !) return ( <> <h1>Um elemento</h1> <p>Outro elemento</p> </> );
  • 7. Roteamento • "Definição": é uma forma de mudar os componentes exibidos na página a partir de padrões de URL (rotas); • Para tanto, precisamos instalar um pacote "React Router" create-react-app teste-rotas cd teste-rotas npm i --save react-router-dom code .
  • 8. Projeto de Exemplo • Vamos criar alguns componentes básicos que podem ser acessados com os seguintes padrões de URL Componente URL Principal / ListaDeProdutos /produtos DetalheProduto /produtos/ID_PRODUTO PaginaNaoEncontrada QQ_OUTRA_URL
  • 10.
  • 11.
  • 13.
  • 14.
  • 15.
  • 16.
  • 18.
  • 19.
  • 20. Navegando entre os componentes
  • 21.
  • 22.
  • 23.
  • 25. Qual é o problema ? • Ter que passar valores em muitos níveis (props e callbacks) • Acoplamento entre componentes • Solução: • Criar um contexto • Um contexto armazena um objeto chamado value • Esse objeto pode conter valores e funções • Qual aplicado em um componente, o valor do contexto está disponível nele e em seus filhos
  • 26.
  • 27. Context • Criando um Context: var MeuContexto = React.createContext( ); • Atribuindo o value do context: <MeuContexto.Provider value={QQ_COISA} > ELEMENTOS QUE VÃO RECEBER O CONTEXTO </MeuContexto.Provider>
  • 28. Consumindo os valores do Context • Consumer: • Ex. MeuContext.Consumer • Faz sentido, se o valor é atribuído com Provider, ele é lido com Consumer • Ex: <MeuContext.Consumer> { (context) => ACESSA AQUI OS VALORES QUE ESTÃO NO VALUE } </MeuContext.Consumer> • contextType: • Ex: Componente.contextType = MeuContext; • Injeta o context no componente, aí é só acessar (this.context)
  • 29.
  • 30.
  • 32.
  • 33.
  • 34.
  • 35. Hooks (introdução) esse tema ainda vai continuar
  • 36. Hooks • Novo meio para declarar e manipular o estado de componentes • Utilizados em Function Components:
  • 37. useState • Facilita a definição de propriedades de estado e seus respectivos métodos modificadores • Sintaxe: • const [propriedade, setPropriedade] = useState(VALOR_INICIAL)
  • 38. Motivação • Function Components e Hooks são meios para simplificar a criação de componentes • A retrocompatibilidade é mantida • Class Components continuam sendo suportados (ainda são o jeito padrão de utilizar componentes) • Próximos passos: • Ciclo de vida dos componentes (Class e Function) • Requisições AJAX (fetch) • async / await
  • 39. Atividade • Individual • Prazo: 21/03/2019 • O que fazer: • Adicionar rotas à loja: • todos os produtos, detalhe de um produto, registro e login • O registro e o login ainda não precisam estar funcionando (preciso só dos formulários e das rotas) • Como entregar: • O link do repositório deverá ser enviado para a atividade no classroom da disciplina