SlideShare uma empresa Scribd logo
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 + "!");
}
Introdução React.js
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>
    );
  }
}
Introdução React.js
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?

Mais conteúdo relacionado

PDF
React - Introdução
PDF
Introdução ao React
PDF
Introduction to Redux
PDF
Programação Orientação a Objetos - Herança
PDF
PDF
React and redux
PPTX
React js programming concept
PPTX
React JS - Parte 1
React - Introdução
Introdução ao React
Introduction to Redux
Programação Orientação a Objetos - Herança
React and redux
React js programming concept
React JS - Parte 1

Mais procurados (20)

PPTX
State management in react applications (Statecharts)
PDF
Node.js e Express
PPTX
React workshop
PDF
Basics of React Hooks.pptx.pdf
PDF
ReactJS presentation
PDF
Redux Toolkit - Quick Intro - 2022
PPTX
What is component in reactjs
PDF
React Router: React Meetup XXL
PDF
React new features and intro to Hooks
PPTX
React state
PDF
react redux.pdf
PPTX
Introduce Docker
PDF
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
PDF
Windows Registered I/O (RIO) vs IOCP
ODP
Introduction to ReactJS
PPTX
Getting started with Redux js
PPTX
React JS: A Secret Preview
PPTX
PPTX
PPT
Spring Core
State management in react applications (Statecharts)
Node.js e Express
React workshop
Basics of React Hooks.pptx.pdf
ReactJS presentation
Redux Toolkit - Quick Intro - 2022
What is component in reactjs
React Router: React Meetup XXL
React new features and intro to Hooks
React state
react redux.pdf
Introduce Docker
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Windows Registered I/O (RIO) vs IOCP
Introduction to ReactJS
Getting started with Redux js
React JS: A Secret Preview
Spring Core
Anúncio

Semelhante a Introdução React.js (20)

PDF
Intodução ao React
PDF
Nadando em Dinheiro com jQuery
PPT
PHP e AJAX: do Request ao Framework
PPTX
TypeScript em Aplicações Modernas
PDF
Precisamos falar sobre MERN stack
PDF
Evolução e futuro do uso de paradigmas no JavaScript
PDF
Java script
PPTX
Flávio Almeida MEAN Stack "to be or not to be mean"
PDF
Encet 2008-ajax java
PDF
Produtividade em Java com Grails
PDF
Ajax em java
PDF
Extração de informação no StackOverflow Careers
PPS
Conceitos de Ajax
PDF
Desafios de um desenvolvedor JSF
PDF
Groovy na plataforma Java
PDF
JavaScript Model-View no Frontend
PDF
TDC 2015 - Rails & Javascript: faça isso direito
PDF
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
PPT
PHP e Ajax com XAJAX
PDF
Java Web Fácil com VRaptor
Intodução ao React
Nadando em Dinheiro com jQuery
PHP e AJAX: do Request ao Framework
TypeScript em Aplicações Modernas
Precisamos falar sobre MERN stack
Evolução e futuro do uso de paradigmas no JavaScript
Java script
Flávio Almeida MEAN Stack "to be or not to be mean"
Encet 2008-ajax java
Produtividade em Java com Grails
Ajax em java
Extração de informação no StackOverflow Careers
Conceitos de Ajax
Desafios de um desenvolvedor JSF
Groovy na plataforma Java
JavaScript Model-View no Frontend
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2011 Goiânia: Evolução da linguagem de programação JavaScript
PHP e Ajax com XAJAX
Java Web Fácil com VRaptor
Anúncio

Mais de Henrique Gogó (9)

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

Último (19)

PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Aula 18 - Manipulacao De Arquivos python
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Apple Pippin Uma breve introdução. - David Glotz
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Processos na gestão de transportes, TM100 Col18
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
COBITxITIL-Entenda as diferença em uso governança TI
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Aula04-Academia Heri- Tecnologia Geral 2025
Custos e liquidação no SAP Transportation Management, TM130 Col18
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26

Introdução React.js