SlideShare uma empresa Scribd logo
1 de 81
React - Primeiras Impressões
React - Primeiras Impressões
WHAT!??
?
WHAT!??
?
“Reações” ao react
Feio, estranho, html dentro JS
Separação de preocupações (responsabilidade)!?
React é uma templating language!?
JSX
JSX
JSX
JSX
VISH...VISH...
JSX quando compilado…
É apenas javascript
JSX quando compilado…
É apenas javascript
React - Segundas Impressões
Humm… Tem dois fluxos de dados igual
Angular!?
Isso roda com… mas como!?
E como é que ele muda o DOM mesmo ?
Antes,
alguns conceitos
fundamentais
O que react não é:
Controllers
Directives
Templates
Global Event Listeners
Models
View Models
E o que react é?
Apenas Componentes!
Divisão de
responsabilidade
Mas e a
manutenibilidade?
E se separássemos
de uma forma
diferente ?
CartComponent
CartComponent
CartListComponent
CartListComponent
CartComponent
CartItemComponent
ButtonItemComponent
CartListComponent
CartComponent
CartItemComponent
Separação de
Responsabilidade Componentes
Reusável
Manutenível
Testável
Fácil de detectar erros
Se os componentes forem
verdadeiramente autônomos
Sobre Fluxo de dados
Sem FrameWork: qualquer componente se
comunica com qualquer componente;
Backbone Pub-Sub: ao invés de ter fn nas
chamadas dos métodos, você tem classes
observando eventos.
Angular JS: 2-way data binding (View, scope,
Controller) e $digest loop
Sobre Fluxo de dados
ReactJS: 1-way data flow;
Check
Props
Sobre Fluxo de dados
ReactJS: 1-way reactive data flow;
Os dados são passados do elemento pai para o
elemento filho
Sobre Fluxo de dados
Props é acessado por this.props
Props
Check
Sobre Fluxo de dados
Props é acessado por this.props
Props
Check
Sobre Fluxo de dados
This.props é imutável
Apenas leitura cara!
Sobre Fluxo de dados
O state é mutável
Do It Yourself
Sobre Fluxo de dados
O state é mutável
Do It Yourself
Sobre Fluxo de dados
O state pode se tornar uma props
Fluxo de dados, os dados fluem para os
componentes filhos
Fluxo de dados, os dados fluem para os
componentes filhos
Fluxo de dados, os dados fluem para os
componentes filhos
Os eventos fluem subido para os componentes pai
Os eventos fluem subido para os componentes pais
Os eventos fluem subido para os componentes pai
CartComponent
CartComponent
CartListComponent
CartListComponent
CartComponent
CartItemComponent
ButtonItemComponent
CartListComponent
CartComponent
CartItemComponent
os dados fluem de componentes pias para os
componentes filhos
Os eventos fluem subido dos filhos para os
componentes pai
Familiar ao DOM…
os dados fluem de componentes pias para os
componentes filhos
Os eventos fluem subido dos filhos para os
componentes pai
Familiar o DOM…
E já que falamos
em DOM
Manipular o DOM é ruim cara!
É inconsistente
Manipular o DOM é ruim cara!
É inconsistente
É dificil de testar
Manipular o DOM é ruim cara!
É inconsistente
É dificil de testar
É frágil
Manipular o DOM é ruim cara!
É inconsistente
É dificil de testar
É frágil
Global Event Listeners
Manipular o DOM é ruim cara!
É inconsistente
É dificil de testar
É frágil
Global Event Listeners
É CUSTOSO
Manipular o DOM é ruim cara!
É inconsistente
É dificil de testar
É frágil
Global Event Listeners
É CUSTOSO
É de passar raiva! ò_Ó
E o VirtualDOM?
VirtualDOM - Fist Render
t
Browser
<html>
<button>AdicionarTexto</button
>
<p></p>
</html>
User View
DOM
Processo Javascript
React V.DOM
VirtualDOM - Fist Render
t
Browser
<html>
<button>Adicionar
Texto</button>
<p></p>
</html>
<html>
<button>Adicionar
Texto</button>
<p></p>
</html>
O DOM real é preenchido pelo dom virtual.
User View
DOM
Processo Javascript
React V.DOM
VirtualDOM - Fist Render
t
Browser
<html>
<button>Adicionar
Texto</button>
<p></p>
</html>
<html>
<button>Adicionar
Texto</button>
<p>Novo texto adicionado</p>
</html>
O Usuário clica em Adicionar Texto
User View
DOM
Processo Javascript
React V.DOM
VirtualDOM - Fist Render
t
Browser
Processo Javascript
React V.DOM
<html>
<button>Adicionar
Texto</button>
<p>Novo texto adicionado</p>
</html>
User View
DOM
<html>
<button>Adicionar
Texto</button>
<p>Novo texto adicionado</p>
</html>
O DIFF é feito e o React adiciona as mudanças
E o VirtualDOM?
javascript na memória, simulando o DOM;
render() é disparado quando algo muda;
React faz o diff (DOM X VirtualDOM)
e muda apenas o que realmente mudou;
Rápido e preciso;
Ciclo de vida
(Component LifeCycle)
3 Partes principais
Mounting - Um componente irá ser inserido no DOM
Updating - Um componente está para ser renderizado novamente
Unmounting - Um componente está sendo removido do DOM.
+ Métodos interpretativos (Will);
Ciclo de vida
(Component LifeCycle)
getInitalState - retorna os dados iniciais do componente e é chamado
antes do componente ser montado.
componentWillMount - Chamado imediatamente antes do componente
ser montado;
componentDidMount - Chamado imediatamente depois do
componente ser montado; Se precisar alterar o DOM deve vir aqui.
Mounting
Ciclo de vida
(Component LifeCycle)
ComponenteWillReciveProps(nextProps) - chamado quando um
componente recebe novas propriedades;
shouldComponentUpdate(nextProps, nextState) - Deve retornar um
boolean se o componente deve ser atualizado ou não;
ComponenteWillUpdate(nextProps, nextState) - Chamado
imediatamente antes de uma atualização acontecer.
ComponenteDidUpdate(prevProps, prevState) - Chamado
imediatamente depois da atualização acontecer
Updating
Ciclo de vida
(Component LifeCycle)
ComponenteWillUnmount - Chamado imediatamente antes de um
componente ser desmontado e destruído. Limpezas devem ser feitas
aqui.
Unmounting
Ciclo de vida
(Component LifeCycle)
E o que fazer com as interações como:
onClick,
onKeyDown,
onKeyUp?
React + Redux
React + Redux
onClick,
onKeyDown,
onKeyUp?
Deixe o redux cuidar disso!
O Redux permite gerenciar o estado com um
comportamento previsível.
React + Redux
Redux utiliza os conceitos de programação funcional como
a imutabilidade, sempre que uma ação ocorre o estado
anterior recebe um novo estado e este é retornado.
React + Redux
MVC
React + Redux
FLUX
“
O princípios básicos
#1 - Uma única fonte de verdade:
Todo o estado será organizado
em formato de árvore e estará
disponível em um único lugar na
sua aplicação.
“
O princípios básicos
#2 - O estado é somente leitura:
Ele só pode ser alterado através de uma ação que
envia qual dado deve ser modificado. Garantindo
que todas as mudanças sejam centralizadas em
um único lugar.
“
O princípios básicos
#3 - Modificações são feitas por funções
puras:
As ações para a alteração de um estado não
irão modificar o próprio objeto, serão os
reducers os responsáveis por sempre
retornar um novo estado atualizado.
Data Flow
t
Obrigado! =]
#frontmcz17
djanilson.alves@gmail.com

Mais conteúdo relacionado

Semelhante a React - Front In Maceió Framework Edition - 2017

Semelhante a React - Front In Maceió Framework Edition - 2017 (20)

React native - testável e organizado
React native - testável e organizadoReact native - testável e organizado
React native - testável e organizado
 
Angular + Redux (ngRx)
Angular + Redux (ngRx)Angular + Redux (ngRx)
Angular + Redux (ngRx)
 
script.aculo.us
script.aculo.usscript.aculo.us
script.aculo.us
 
Conhecendo o Spring
Conhecendo o SpringConhecendo o Spring
Conhecendo o Spring
 
Primeiros passos para tomar uma decisão de arquitetura com AngularJS.
Primeiros passos para tomar uma decisão de arquitetura com AngularJS.Primeiros passos para tomar uma decisão de arquitetura com AngularJS.
Primeiros passos para tomar uma decisão de arquitetura com AngularJS.
 
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
QCon SP 2015 - Advogados do diabo: como a arquitetura emergente de sua aplica...
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
TDC2016SP - Trilha Frameworks JavaScript
TDC2016SP - Trilha Frameworks JavaScriptTDC2016SP - Trilha Frameworks JavaScript
TDC2016SP - Trilha Frameworks JavaScript
 
AngularJS sem medo
AngularJS sem medoAngularJS sem medo
AngularJS sem medo
 
Ionic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APPIonic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APP
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
Construindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutosConstruindo um micro-serviço Java 100% funcional em 15 minutos
Construindo um micro-serviço Java 100% funcional em 15 minutos
 
Palestra Demoiselle V1.x no 11 FISL
Palestra Demoiselle V1.x no 11 FISL Palestra Demoiselle V1.x no 11 FISL
Palestra Demoiselle V1.x no 11 FISL
 
React - Compartilhando estado entre componentes
React - Compartilhando estado entre componentesReact - Compartilhando estado entre componentes
React - Compartilhando estado entre componentes
 
TDC2016POA | Trilha Web - Front-end that scales
TDC2016POA | Trilha Web - Front-end that scalesTDC2016POA | Trilha Web - Front-end that scales
TDC2016POA | Trilha Web - Front-end that scales
 
React js
React js React js
React js
 
Agile com Demoiselle - FISL 11
Agile com Demoiselle - FISL 11Agile com Demoiselle - FISL 11
Agile com Demoiselle - FISL 11
 
DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...
 
React - Introdução
React - IntroduçãoReact - Introdução
React - Introdução
 
03 - Palestra O que Lean
03 - Palestra O que Lean03 - Palestra O que Lean
03 - Palestra O que Lean
 

Último

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Último (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

React - Front In Maceió Framework Edition - 2017