SlideShare a Scribd company logo
1 of 28
Download to read offline
React.js
Construindo aplicações reativas em JavaScript
Quem sou eu?
Henrique Soares
Programador desde 2009 (antes era PHP e não conta
:D)
Instituto Atlântico desde 2012
Entusiasta de JavaScript
BrazilJS 2011
JSConfBR 2013 e 2014
Comunidade CEJS (eventos, hackatons, etc)
Como começou o JavaScript
JavaScript was created in 10 days in May 1995 by
Brendan Eich (Netscape)
https://en.wikipedia.org/wiki/JavaScript#History
var person = prompt("Please enter your name");
if (person != null) {
    document.write("Hello " + person + "!");
}
Coisas Da vida
1995 Netscape cria o JavaScript
1996 ECMA padroniza
1997 ES1
1998 ES2
1999 ES3 ­ regex, try/catch
2005
Jesse James Garrett cunhou o termo Ajax (Prototype,
jQuery, Dojo and Mootools)
2008 ES4 (abandonado)
2009 ES5 ­ strict, JSON, Reflect
2015 ES6 ­ class, arrows
2016 ES7 / ES2016 ­ exponentiation operator (**)
2017 ES2017 ­ async/await
Templates
EJS, Jade, Mustache.js, Microtemplating etc
<ul>
<% for(var i=0; i<supplies.length; i++) {%>
    <li><%= supplies[i] %></li>
<% } %>
</ul>
{{#stooges}}
<b>{{name}}</b>
{{/stooges}}
Sobre o uso de templates
Vantagens Problemas
Mudanças dinâmicas no
HTML
Acoplamento
Interage com objetos e
varáveis JS de view
Pode ficar difícil manter
Renderização no client­
side
Delay de renderização (compilação
em runtime)
Reuso
Renderiza mas a página ainda é
"burra" – não tem binds
Reuso (sim, reuso) – pré­
carregamento = mais uma requisição
jQuery e DOM
Seletores, Eventos, Binds e Callbacks
$("input[name=age]").on("change", function() {
    if ($(this).val() > 15) {
        console.log("Velhote");
    }
});
$("form").submit(function() {
    $.post("/users", $("form").serialize());
    return false;
});
Sobre o uso de jQuery e binds
Vantagens Problemas
Separação
JS/HTML
Lidar com seletores e callbacks pode deixar
seu código bagunçado
Plugins
Se o designer alterar o HTML / DOM, o
código quebra
Compatibilidade
multibrowser
Só olhando o código HTML não se sabe os
binds e ações dos elementos
Extensível Baixo reuso e alta acoplação
Precisamos de modelos para as views
Frameworks
Backbone.js (um dos primeiros, poucos usam hoje)
Knockout.js (Microsoft adotou)
Angular.js (Google)
React.js (Facebook)
E o React.js, onde entra?
React components implement a render() method that takes
input data and returns what to display. This example uses an
XML­like syntax called JSX. Input data that is passed into the
component can be accessed by render() via this.props.
Na prática...
class Timer extends React.Component {
  constructor(props) {
    super(props);
    this.state = { seconds: 0 };
  }
  tick() {
    this.setState(prevState => ({
      seconds: prevState.seconds + 1
    }));
  }
  componentDidMount() {
    this.interval = setInterval(() => this.tick(), 1000);
  }
  componentWillUnmount() {
    clearInterval(this.interval);
  }
  render() {
    return (
      <div>
        Seconds: {this.state.seconds}
      </div>
    );
  }
}
ReactDOM.render(<Timer />, document.getElementById('container'));
Virtual DOM
No React, para cada objeto DOM, existe um "objeto DOM virtual"
correspondente. Um objeto DOM virtual é a representação de um
objeto DOM, como uma cópia em memória.
Um objeto DOM virtual tem as mesmas propriedades do DOM real
mas diferenças quando algo é alterado e sua representação na
tela.
Manipular DOM é lento. Manipular o DOM virtual é muito mais
rápido por que não mexe com nada desenhado na tela. Imagine
que manipular um DOM virtual é como editar uma planta baixa ao
invés de mover as salas de uma casa construída.
Ciclo de vida dos componentes
Muito parecido com qualquer
tecnologia que use componentes
Componentes usam componentes
import React, { Component } from 'react';
import {Drawer, List, ListItem, ListItemIcon, ListItemText} from 'material­ui';
import {Inbox as InboxIcon, Drafts as DraftsIcon} from 'material­ui­icons';
export default class SidebarMenu extends Component {
  constructor(props) {
    super(props);
    this.state = {open: false};
  }
  
  closeMenu = () => {
    this.setState({open: false});
  }
  
  render() {
    return (
      <Drawer open={this.state.open} onRequestClose={this.closeMenu} classes={{paper: classes.menu}}>
        <List>
          <Link to='/home' onClick={this.closeMenu}>
            <ListItem button>
              <ListItemIcon>
                <InboxIcon />
              </ListItemIcon>
              <ListItemText primary='Home' />
            </ListItem>
          </Link>
          <Link to='/about' onClick={this.closeMenu}>
            <ListItem button>
              <ListItemIcon>
                <DraftsIcon />
              </ListItemIcon>
              <ListItemText primary='About' />
            </ListItem>
          </Link>
        </List>
      </Drawer>
    );
  }
}
Comunicação entre componentes
Props
Props são a maneira mais simples de transferir informações entre
os componentes. Com props você pode enviar dados do pai para o
filho.
Props são uma feature central do React.
<MeuComponente propriedadeQueDefini="Valor dado" />
class MeuComponente extends Component {
  render() {
    return (
      <div>{this.props.propriedadeQueDefini}</div>
    );
  }
}
Métodos de instância
Métodos de instância no componente filho podem ser chamados
pelo pai usando refs.
class TheChild extends React.Component {
  myFunc() {
    return 'hello';
  }
}
class TheParent extends React.Component {
  render() {
    return (
      <TheChild ref={(foo) => { this.foo = foo; }} />
    );
  }
 
  componentDidMount() {
    var x = this.foo.myFunc();
    // x is now 'hello' 
  }
}
Outras maneiras
https://www.andrewhfarmer.com/component­communication/
Dependendo da complexidade / tamanho da aplicação, é
necessário alguma estratégia de gerir essa comunicação entre os
componentes, e fazer com que um ou mais componente reaja a
uma ação de outro.
Nesse cenário o mais recomendado ­ e comum na comunidade ­ é
utilizar o Flux (pattern criado pelo Facebook), mais propriamente a
sua implementação Redux.
...mas não iremos abordar isso hoje.
Criando uma aplicação do zero
a.k.a deixa de blá blá blá e me mostre o código
(Colazinha básica)
npm install ­g create­react­app
create­react­app my­app
https://github.com/henriquegogo/react­start
Ecossistema React.js
Redux (Implementação do pattern Flux)
react­router
material­ui
Webpack
Perguntas?

More Related Content

What's hot

DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScriptThiago Poiani
 
TypeScript Best Practices
TypeScript Best PracticesTypeScript Best Practices
TypeScript Best Practicesfelixbillon
 
Introduction to React JS for beginners
Introduction to React JS for beginners Introduction to React JS for beginners
Introduction to React JS for beginners Varun Raj
 
ES6 presentation
ES6 presentationES6 presentation
ES6 presentationritika1
 
React web development
React web developmentReact web development
React web developmentRully Ramanda
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)Armando Daniel
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoEduardo Bohrer
 
Object Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptObject Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptForziatech
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPDaniel Brandão
 
Introduction to ReactJS
Introduction to ReactJSIntroduction to ReactJS
Introduction to ReactJSHoang Long
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript IntroductionDmitry Sheiko
 

What's hot (20)

React-JS.pptx
React-JS.pptxReact-JS.pptx
React-JS.pptx
 
Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
 
Reactjs
Reactjs Reactjs
Reactjs
 
Introduction Node.js
Introduction Node.jsIntroduction Node.js
Introduction Node.js
 
TypeScript
TypeScriptTypeScript
TypeScript
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScript
 
Curso de Node JS Básico
Curso de Node JS BásicoCurso de Node JS Básico
Curso de Node JS Básico
 
TypeScript Best Practices
TypeScript Best PracticesTypeScript Best Practices
TypeScript Best Practices
 
Introduction to React JS for beginners
Introduction to React JS for beginners Introduction to React JS for beginners
Introduction to React JS for beginners
 
ES6 presentation
ES6 presentationES6 presentation
ES6 presentation
 
React web development
React web developmentReact web development
React web development
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
 
Object Oriented Programming In JavaScript
Object Oriented Programming In JavaScriptObject Oriented Programming In JavaScript
Object Oriented Programming In JavaScript
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
.Net Core
.Net Core.Net Core
.Net Core
 
React + Redux for Web Developers
React + Redux for Web DevelopersReact + Redux for Web Developers
React + Redux for Web Developers
 
Introduction to ReactJS
Introduction to ReactJSIntroduction to ReactJS
Introduction to ReactJS
 
React js
React jsReact js
React js
 
TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript Introduction
 

Similar to Construindo aplicações reativas com React.js

Intodução ao React
Intodução ao ReactIntodução ao React
Intodução ao ReactDev PP
 
Nadando em Dinheiro com jQuery
Nadando em Dinheiro com jQueryNadando em Dinheiro com jQuery
Nadando em Dinheiro com jQueryReinaldo Junior
 
PHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkPHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkRafael Dohms
 
TypeScript em Aplicações Modernas
TypeScript em Aplicações ModernasTypeScript em Aplicações Modernas
TypeScript em Aplicações ModernasNicolas Takashi
 
Precisamos falar sobre MERN stack
Precisamos falar sobre MERN stackPrecisamos falar sobre MERN stack
Precisamos falar sobre MERN stackSidney Roberto
 
Evolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScriptEvolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScriptJean Carlo Emer
 
Flávio Almeida MEAN Stack "to be or not to be mean"
Flávio Almeida MEAN Stack "to be or not to be mean"Flávio Almeida MEAN Stack "to be or not to be mean"
Flávio Almeida MEAN Stack "to be or not to be mean"flaviohalmeida
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com GrailsWanderson Oliveira
 
Extração de informação no StackOverflow Careers
Extração de informação no StackOverflow CareersExtração de informação no StackOverflow Careers
Extração de informação no StackOverflow Careersroberta arcoverde
 
Desafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFDesafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFRafael Ponte
 
Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma JavaJoão Lourenço
 
JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no FrontendHenrique Gogó
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptRogério Moraes de Carvalho
 
PHP e Ajax com XAJAX
PHP e Ajax com XAJAXPHP e Ajax com XAJAX
PHP e Ajax com XAJAXRafael Dohms
 

Similar to Construindo aplicações reativas com React.js (20)

Intodução ao React
Intodução ao ReactIntodução ao React
Intodução ao React
 
Nadando em Dinheiro com jQuery
Nadando em Dinheiro com jQueryNadando em Dinheiro com jQuery
Nadando em Dinheiro com jQuery
 
PHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkPHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao Framework
 
TypeScript em Aplicações Modernas
TypeScript em Aplicações ModernasTypeScript em Aplicações Modernas
TypeScript em Aplicações Modernas
 
Precisamos falar sobre MERN stack
Precisamos falar sobre MERN stackPrecisamos falar sobre MERN stack
Precisamos falar sobre MERN stack
 
Evolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScriptEvolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScript
 
Java script
Java scriptJava script
Java script
 
Flávio Almeida MEAN Stack "to be or not to be mean"
Flávio Almeida MEAN Stack "to be or not to be mean"Flávio Almeida MEAN Stack "to be or not to be mean"
Flávio Almeida MEAN Stack "to be or not to be mean"
 
Encet 2008-ajax java
Encet 2008-ajax javaEncet 2008-ajax java
Encet 2008-ajax java
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com Grails
 
Ajax em java
Ajax em javaAjax em java
Ajax em java
 
Extração de informação no StackOverflow Careers
Extração de informação no StackOverflow CareersExtração de informação no StackOverflow Careers
Extração de informação no StackOverflow Careers
 
Conceitos de Ajax
Conceitos de AjaxConceitos de Ajax
Conceitos de Ajax
 
Desafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSFDesafios de um desenvolvedor JSF
Desafios de um desenvolvedor JSF
 
Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma Java
 
JavaScript Model-View no Frontend
JavaScript Model-View no FrontendJavaScript Model-View no Frontend
JavaScript Model-View no Frontend
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direito
 
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScriptTDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
 
PHP e Ajax com XAJAX
PHP e Ajax com XAJAXPHP e Ajax com XAJAX
PHP e Ajax com XAJAX
 
Java Web Fácil com VRaptor
Java Web Fácil com VRaptorJava Web Fácil com VRaptor
Java Web Fácil com VRaptor
 

More from Henrique Gogó

Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosHenrique Gogó
 
Backbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webBackbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webHenrique Gogó
 
PhantomJS - O Fantasminha Camarada
PhantomJS - O Fantasminha CamaradaPhantomJS - O Fantasminha Camarada
PhantomJS - O Fantasminha CamaradaHenrique Gogó
 
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Henrique Gogó
 
Criando aplicações JavaScript com CouchApp + Sammy.js
Criando aplicações JavaScript com CouchApp + Sammy.jsCriando aplicações JavaScript com CouchApp + Sammy.js
Criando aplicações JavaScript com CouchApp + Sammy.jsHenrique Gogó
 
Urls amigáveis em JavaScript com Sammy JS
Urls amigáveis em JavaScript com Sammy JSUrls amigáveis em JavaScript com Sammy JS
Urls amigáveis em JavaScript com Sammy JSHenrique Gogó
 

More from Henrique Gogó (9)

Be React. Do Tests!
Be React. Do Tests!Be React. Do Tests!
Be React. Do Tests!
 
Backbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectadosBackbone.js + Rails - Front-end e back-end conectados
Backbone.js + Rails - Front-end e back-end conectados
 
Backbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações webBackbone.js - A espinha dorsal de aplicações web
Backbone.js - A espinha dorsal de aplicações web
 
PhantomJS - O Fantasminha Camarada
PhantomJS - O Fantasminha CamaradaPhantomJS - O Fantasminha Camarada
PhantomJS - O Fantasminha Camarada
 
NoSQL + Node.js
NoSQL + Node.jsNoSQL + Node.js
NoSQL + Node.js
 
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
 
Criando aplicações JavaScript com CouchApp + Sammy.js
Criando aplicações JavaScript com CouchApp + Sammy.jsCriando aplicações JavaScript com CouchApp + Sammy.js
Criando aplicações JavaScript com CouchApp + Sammy.js
 
Conhecendo o CouchDB
Conhecendo o CouchDBConhecendo o CouchDB
Conhecendo o CouchDB
 
Urls amigáveis em JavaScript com Sammy JS
Urls amigáveis em JavaScript com Sammy JSUrls amigáveis em JavaScript com Sammy JS
Urls amigáveis em JavaScript com Sammy JS
 

Construindo aplicações reativas com React.js