
React
Primeiros Passos



O que é React?
Uma biblioteca JS para a construção de UIs


Biblioteca
X
Framework


"Seu código usa a biblioteca,
O Framework usa seu código"


: Interfaces de Usuário
UIs
Visível
Ação Positiva


Componentes



Vamos colocar a
mão na massa!
https://github.com/JsBatista/workshopReact


CodePen
codepen.io



Hello World



create-react-app
nome_do_projeto
hello
cd
nome_do_projeto
hello
npm start
localhost:3000
public
}
}
src
App.js
index.js
index.html


import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import registerServiceWorker from './registerServiceWorker';
ReactDOM.render(<App />, document.getElementById('root'));
registerServiceWorker();
index.js
...
<div id="root"></div>
...
index.html

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
class App extends Component {
render() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h1 className="App-title">Welcome to React</h1>
</header>
<p className="App-intro">
To get started, edit <code>src/App.js</code>
</p>
</div>
);
}
}
export default App;
App.js
import React, { Component } from 'react';
class App extends Component {
render() {
return (
<div>
<p>Hello World!</p>
</div>
);
}
}
export default App;
App.js
Salvar
Parar o Servidor
Recarregar a Página
Reiniciar o Servidor
Olhar a localhost:3000




CheckPoint 1
Vamos criar nosso primeiro componente!
Estruture bem a arquitetura
do seu projeto!
Separe seus componentes
1 componente - 1 pasta
NomeComponente = NomePasta
Começar com letra maiúscula
NomeComponente = NomeArquivo
import React, {Component} from 'react';
class HelloUser extends Component {
render(){
return(
<div>
</div>
<p>Bom dia {this.props.name}!</p>
);
};
}
export default HelloUser;
HelloUser.js
import React, {Component} from 'react';
class App extends Component {
render() {
return (
<div>
<p>Hello World!</p>
App.js
<HelloUser />
</div>
);
}
}
export default App;
import HelloUser from './Components/HelloUser/HelloUser';
import React, {Component} from 'react';
class App extends Component {
render() {
return (
<div>
<p>Hello World!</p>
App.js
<HelloUser name="Gabriel Suassuna"/>
</div>
);
}
}
export default App;
import HelloUser from './Components/HelloUser/HelloUser';

CheckPoint 2
class App extends Component {
render() {
return (
<div>
<p>Hello World!</p>
<HelloUser name="Gabriel Suassuna"/>
</div>
);
}
}
<HelloUser name="Vinicius Somebody"/>
<HelloUser name="Pedro Victor"/>
<HelloUser name="Matheus Navarro"/>
<HelloUser name="Luan Carvalho"/>
<HelloUser name="Hariamy Vasconcelos"/>
<HelloUser name="João Pedro Delgado"/>
App.js
<HelloUser name="Gabriel Freire"/>

class App extends Component {
render() {
</div>
);
}
}
const listaDeMembros = ["Gabriel Suassuna",
"Vinicius Somebody",...,"João Pedro Delgado"];
const listaDeComponentes = listaDeMembros.map((atual)=>{
return <HelloUser name={atual}/>
});
return (
<div>
<p>Hello World!</p>
{listaDeComponentes}
App.js

CheckPoint 3





...
const listaDeComponentes = listaDeMembros.map((atual)=>{
return <HelloUser name={atual} key={atual}/>
});
...


Tipos de Componentes
Stateful Components
Stateless Components
Apenas o Necessário
Não precisa de estado? Não seja Stateful
Estados manipulados pelos componentes certos
Use Stateful components apenas quando necessário
Containers são Stateful



3 Perguntas
Manipula dados dinamicamente?
Isso é responsabilidade dele?
É um container?



App.js
Manipula dados dinamicamente?
Isso é responsabilidade dele?
É um container?



HelloUser.js
Manipula dados dinamicamente?
Isso é responsabilidade dele?
É um container?


import React, {Component} from 'react';
class HelloUser extends Component {
render(){
return(
<div>
<p>Bom dia {this.props.name}!</p>
</div>
);
};
}
export default HelloUser;
HelloUser.js


HelloUser.js
import React from 'react';
const helloUser = ( ) => {
return(
<div>
<p>Bom dia !</p>
</div>
props
{props.name}
);
}
export default helloUser;
Eventos
Triggers
Listeners
Callbacks




)
)
)




HelloMaker
Cria novos HelloUsers
HelloUsers personalizados
Escalável



HelloMaker.js
Manipula dados dinamicamente?
Isso é responsabilidade dele?
É um container?
import React,{Component} from 'react';
class HelloMaker extends Component {
render(){
return(
<div>
<input type="text" />
<button>Diga bom dia!</button>
</div>
);
};
}
export default HelloMaker;
HelloMaker.js
import React, { Component } from 'react';
import HelloUser from './Components/HelloUser/HelloUser';
import HelloMaker from './Components/HelloMaker/HelloMaker';
class App extends Component {
state = {
listaDeMembros: ["Gabriel Suassuna",...,"João Pedro Delgado"];
}
render() {
const listaDeComponentes = this.state.listaDeMembros.map((atual)=>{
return <HelloUser name={atual} key={atual}/>
});
return (
);
}
}
export default App;
<div>
<p>Hello World!</p>
<HelloMaker />
{listaDeComponentes}
</div>
App.js

CheckPoint 4
HelloMaker
App
Recebe o valor do input
Guarda no estado
Passa valor para App
Incrementa ListaDeMembros
Zera valor do input
...
state = {
listaDeMembros: ["Gabriel Suassuna", ... ,"João Pedro Delgado"]
}
render() {
const listaDeComponentes = ...
return (
<div>
<p>Hello World!</p>
<HelloMaker createNewHelloUser={this.createNewHelloUser}/>
createNewHelloUser = (newUser) => {
let listaTemporaria = [...this.state.listaDeMembros];
listaTemporaria.push(newUser);
this.setState({
listaDeMembros: listaTemporaria
});
}
...
App.js
ListaDeMembros:
Gabriel Suassuna
Vinicius Somebody
Pedro Victor
Matheus Navarro
Luan Carvalho
Hariamy Vasconcelos
João Pedro Delgado
Gabriel Freire
createNewHelloUser(Gabriel Freire)
ListaTemporaria:
Gabriel Suassuna
Vinicius Somebody
Pedro Victor
Matheus Navarro
Luan Carvalho
Hariamy Vasconcelos
João Pedro Delgado
Gabriel Freire
setState()
class HelloMaker extends Component {
state = {
currentValue: ""
}
updateCurrentValue = (event) => {
this.setState({
currentValue: event.target.value
});
}
triggerCreateNewHelloUser = () => {
this.props.createNewHelloUser(this.state.currentValue);
this.setState({
currentValue: ""
});
}
HelloMaker.js
...
render(){
return(
<div>
</div>
);
};
<input
onChange={this.updateCurrentValue}
type="text"
<button
Diga bom dia!
</button>
value={this.state.currentValue} />
onClick={this.triggerCreateNewHelloUser}>
HelloMaker.js
createNewHelloUser()
HelloMaker
App
createNewHelloUser()
triggerCreateNewHelloUser()
this.props.createNewHelloUser()
createNewHelloUser()
props



CheckPoint 5
Two-Way Data
Binding
Valor Input
Valor Estado
Two-Way Data
Binding
<input
onChange={this.updateCurrentValue}
type="text"
value={this.state.currentValue} />
updateCurrentValue = (event) => {
this.setState({
currentValue: event.target.value
});
}
HelloMaker.js


WorkShop React - 02 - Primeiros Passos
By João Batista
WorkShop React - 02 - Primeiros Passos
- 114