SlideShare uma empresa Scribd logo
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
React JS - Parte 2
React JS - Parte 2
Componentes
React JS - Parte 2
React JS - Parte 2
React JS - Parte 2
React JS - Parte 2
Resultado
React JS - Parte 2
React JS - Parte 2
Navegando entre os componentes
React JS - Parte 2
React JS - Parte 2
React JS - Parte 2
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
React JS - Parte 2
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 JS - Parte 2
React JS - Parte 2
React Developer Tools
Extensão para o Chrome
React JS - Parte 2
React JS - Parte 2
React JS - Parte 2
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

Mais conteúdo relacionado

Mais procurados (20)

PDF
Understanding react hooks
Samundra khatri
 
PPTX
A Brief Introduction to React.js
Doug Neiner
 
PPTX
React.js - The Dawn of Virtual DOM
Jimit Shah
 
PPTX
Introduction to react_js
MicroPyramid .
 
PPTX
React + Redux Introduction
Nikolaus Graf
 
PPTX
React JS part 1
Diluka Wittahachchige
 
PDF
React js
Rajesh Kolla
 
PPTX
React js - The Core Concepts
Divyang Bhambhani
 
PDF
Introduction to React JS
Bethmi Gunasekara
 
PPTX
React js programming concept
Tariqul islam
 
PPTX
Reactjs
Neha Sharma
 
PDF
React - Introdução
Jefferson Mariano de Souza
 
PDF
Getting started with Next.js
Gökhan Sarı
 
PPTX
reactJS
Syam Santhosh
 
PPTX
Introduction to React JS for beginners
Varun Raj
 
PDF
ReactJS Tutorial For Beginners | ReactJS Redux Training For Beginners | React...
Edureka!
 
PPTX
ReactJs
Sahana Banerjee
 
PPTX
Introduction to React
Rob Quick
 
PPTX
React workshop
Imran Sayed
 
PPTX
React js
Oswald Campesato
 
Understanding react hooks
Samundra khatri
 
A Brief Introduction to React.js
Doug Neiner
 
React.js - The Dawn of Virtual DOM
Jimit Shah
 
Introduction to react_js
MicroPyramid .
 
React + Redux Introduction
Nikolaus Graf
 
React JS part 1
Diluka Wittahachchige
 
React js
Rajesh Kolla
 
React js - The Core Concepts
Divyang Bhambhani
 
Introduction to React JS
Bethmi Gunasekara
 
React js programming concept
Tariqul islam
 
Reactjs
Neha Sharma
 
React - Introdução
Jefferson Mariano de Souza
 
Getting started with Next.js
Gökhan Sarı
 
reactJS
Syam Santhosh
 
Introduction to React JS for beginners
Varun Raj
 
ReactJS Tutorial For Beginners | ReactJS Redux Training For Beginners | React...
Edureka!
 
Introduction to React
Rob Quick
 
React workshop
Imran Sayed
 

Semelhante a React JS - Parte 2 (20)

PDF
React js
Alexandre Rosa
 
PDF
Curso de Ruby on Rails - Aula 02
Maurício Linhares
 
PDF
SelectionTracker Para Seleção de Itens no RecyclerView Android
Vinícius Thiengo
 
PPTX
Workshop Mundo Senai - Hello, Angular.js
Fábio Elísio
 
PDF
Workshop React Hooks
Dan Vitoriano
 
PDF
Angular 2
Loiane Groner
 
PDF
Desenvolvimento em .Net - nHibernate
Vitor Silva
 
PDF
React - Compartilhando estado entre componentes
Jefferson Mariano de Souza
 
PDF
Projetos reativos com Angular, RxJS e Redux (ngRx)
Loiane Groner
 
PPT
Rapid Application Development com Tapestry 5
Marcelo Rodrigues
 
PPT
aula de introdução a ecamscript e typescript
FabioAbrantesDiniz
 
PPTX
PDC - Engenharia - Plataforma Microsoft .NET
slides_teltools
 
PDF
Refactoring - Design no Código
Denis L Presciliano
 
PPTX
365on Lab Asp.Net MVC Fundamentos 01 Overview
Alexsandro Almeida
 
PDF
React Styled components, Hook useEffect,React Router DOM, Formulários e Conte...
FabioAbrantesDiniz
 
PDF
Ferramentas de automação de teste
Marcos Pessoa
 
PPTX
Android 02 - Recycler View Adapter
Aline Borges
 
PDF
Desenvolvimento para a Web com CakePHP
Marcelo Andrade
 
PDF
Desafio Rest API
Reinaldo Junior
 
PDF
React Native na globo.com
Guilherme Heynemann Bruzzi
 
React js
Alexandre Rosa
 
Curso de Ruby on Rails - Aula 02
Maurício Linhares
 
SelectionTracker Para Seleção de Itens no RecyclerView Android
Vinícius Thiengo
 
Workshop Mundo Senai - Hello, Angular.js
Fábio Elísio
 
Workshop React Hooks
Dan Vitoriano
 
Angular 2
Loiane Groner
 
Desenvolvimento em .Net - nHibernate
Vitor Silva
 
React - Compartilhando estado entre componentes
Jefferson Mariano de Souza
 
Projetos reativos com Angular, RxJS e Redux (ngRx)
Loiane Groner
 
Rapid Application Development com Tapestry 5
Marcelo Rodrigues
 
aula de introdução a ecamscript e typescript
FabioAbrantesDiniz
 
PDC - Engenharia - Plataforma Microsoft .NET
slides_teltools
 
Refactoring - Design no Código
Denis L Presciliano
 
365on Lab Asp.Net MVC Fundamentos 01 Overview
Alexsandro Almeida
 
React Styled components, Hook useEffect,React Router DOM, Formulários e Conte...
FabioAbrantesDiniz
 
Ferramentas de automação de teste
Marcos Pessoa
 
Android 02 - Recycler View Adapter
Aline Borges
 
Desenvolvimento para a Web com CakePHP
Marcelo Andrade
 
Desafio Rest API
Reinaldo Junior
 
React Native na globo.com
Guilherme Heynemann Bruzzi
 
Anúncio

Mais de Bruno Catão (20)

PPTX
Introdução às Redes Neurais - Parte 2/2
Bruno Catão
 
PPTX
Introdução às Redes Neurais - Parte 1/2
Bruno Catão
 
PPTX
Node JS - Parte 4
Bruno Catão
 
PPTX
Node JS - Parte 3
Bruno Catão
 
PPTX
Node JS - Parte 2
Bruno Catão
 
PPTX
Node JS - Parte 1
Bruno Catão
 
PDF
Ionic 2/3 + Firebase
Bruno Catão
 
PPTX
Retina e Retinose Pigmentar
Bruno Catão
 
PDF
Mean Stack
Bruno Catão
 
PDF
Angular js
Bruno Catão
 
PDF
Introdução à MEAN Stack
Bruno Catão
 
PDF
Web Offline
Bruno Catão
 
KEY
Python 08
Bruno Catão
 
KEY
Python 07
Bruno Catão
 
KEY
Python 06
Bruno Catão
 
KEY
Python 05
Bruno Catão
 
KEY
Python 04
Bruno Catão
 
KEY
Python 03
Bruno Catão
 
KEY
Python 02
Bruno Catão
 
KEY
Python 01
Bruno Catão
 
Introdução às Redes Neurais - Parte 2/2
Bruno Catão
 
Introdução às Redes Neurais - Parte 1/2
Bruno Catão
 
Node JS - Parte 4
Bruno Catão
 
Node JS - Parte 3
Bruno Catão
 
Node JS - Parte 2
Bruno Catão
 
Node JS - Parte 1
Bruno Catão
 
Ionic 2/3 + Firebase
Bruno Catão
 
Retina e Retinose Pigmentar
Bruno Catão
 
Mean Stack
Bruno Catão
 
Angular js
Bruno Catão
 
Introdução à MEAN Stack
Bruno Catão
 
Web Offline
Bruno Catão
 
Python 08
Bruno Catão
 
Python 07
Bruno Catão
 
Python 06
Bruno Catão
 
Python 05
Bruno Catão
 
Python 04
Bruno Catão
 
Python 03
Bruno Catão
 
Python 02
Bruno Catão
 
Python 01
Bruno Catão
 
Anúncio

Último (6)

PDF
Aulas Extras - O que é e por que Aprender e Utilizar.pdf
fmartinsss
 
PPTX
Windows 11 Apostila do Básico ao Avançado
deividcosimo1
 
PDF
Ceritificado Imersão SOC HackOne Sab/Dom.pdf
RodrigoMori7
 
PPTX
5 Critérios para seleção do objeto de estudo.pptx
Eduardo Corrêa
 
DOCX
150 PMBOK 7 Scenario-Based PMP Exam Questions and Answers.docx
Marcelo Cruz
 
PDF
Estudos DAC - projeto de arquitetura futurista
ra189223
 
Aulas Extras - O que é e por que Aprender e Utilizar.pdf
fmartinsss
 
Windows 11 Apostila do Básico ao Avançado
deividcosimo1
 
Ceritificado Imersão SOC HackOne Sab/Dom.pdf
RodrigoMori7
 
5 Critérios para seleção do objeto de estudo.pptx
Eduardo Corrêa
 
150 PMBOK 7 Scenario-Based PMP Exam Questions and Answers.docx
Marcelo Cruz
 
Estudos DAC - projeto de arquitetura futurista
ra189223
 

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
  • 20. Navegando entre os componentes
  • 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
  • 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)
  • 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