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

React - Front In Maceió Framework Edition - 2017