#VemProReact #5
#VemProReact
#VemProReact #4
Logo.js
import { Component } from 'react'
class Logo extends Component {
render() {
const { repeat } = this.props;
let items = []
for (let i = 0; i < repeat && i < 6; i++) {
items.push(<img key={i} src={logo} className="App-logo" alt="logo" />)
}
return (
<div>
{items}
</div>
)
}
};#VemProReact
state.repeat
class Logo extends Component {
state = {
repeat: 1
}
render() {
const { repeat } = this.state;
let items = []
for (let i = 0; i < repeat && i < 6; i++) {
items.push(<img key={i} src={logo} className="App-logo" alt="logo" />)
}
return (
<div>
{items}
</div>
)
}
};#VemProReact #4
#VemProReact
incrementar / decrementar
...
// Exemplo que funciona para este caso
<button
disabled={repeat >= 6}
onClick={() => this.setState((() => ({ repeat: repeat + 1 })))}
>
Add Logo
</button>
// Melhor prática
<button
disabled={repeat <= 1}
onClick={() => this.setState((({ repeat }) => ({ repeat: repeat - 1 })))}
>
Remove Logo
</button>
...#VemProReact #4
#VemProReact
Mas o que é Spread Operator mesmo?
#VemProReact #4
#VemProReact
Spread Operator
- É uma sintaxe
- Faz a atribuição dinâmica de valores
- Forma mais prática de trabalhar com arrays/objetos
Na teoria:
#VemProReact
Spread Operator
Na prática:
- É um trecho do código que parece não fazer sentido e começa com "..."
- Na maioria das vezes, vai estar dentro de um array "[]" ou objeto "{}"
- Extrai o conteúdo do objeto que segue os "..."
Exemplo:
[...array, 3, 4, 5]{
...myObj,
prop: newValue
}#VemProReact
Como usar o spread operator?
Spread Operator
#VemProReact
Considerando a declaração abaixo:
Seria, simplesmente, declarar um novo array, contendo array1 e array2, precedidos por "...":
const array3 = [...array1, ...array2]; // [1, 2, 3, 4]const array1 = [1, 2];
const array2 = [3, 4];
const array3 = array1.concat(array2); // [1,2,3,4]Spread Operator
Observe a diferença:
const array3 = [...array1, ...array2]; // [1, 2, 3, 4]const array3 = [array1, array2]; // [[1, 2], [3, 4]]#VemProReact
Imagine o seguinte:
Seria, simplesmente, receber o objeto dentro dele mesmo (com "...") e sobrescrever a prop desejada:
const user = {
first_name: 'Daniel',
last_name: 'Xavie',
age: 26
};
user.last_name = 'Xavier';
user.first_name + user.last_name + (user.age) // Daniel Xavier (26)Spread Operator
Para objetos, seguimos a mesma ideia...
user = {
...user,
last_name: 'Xavier'
};
user.first_name + user.last_name + (user.age) // Daniel Xavier (26)#VemProReact
Component Lifecycle
Existem 3 métodos principais:
- componentDidMount()
- componentDidUpdate()
- componentWillUnmount()
Nos permite manipular o componente em determinadas situações
São métodos da classe Component (React)
#VemProReact
componentDidMount()
É executado quando o componente é montado na tela!
Exemplo:
class MyComponent extends Component {
state = {
name: ''
}
componentDidMount() {
console.log('MyComponent mounted');
this.setState({ name: 'Daniel' });
}
render() {
const { name} = this.state;
return <p><b>My name is:</b> {name}</p>
}
}

HTML:
console:
#VemProReact
componentDidUpdate()
É executado a cada vez que alguma prop/state do componente é alterado!
Exemplo:
...
componentDidUpdate() {
console.log('MyComponent updated');
}
render() {
...
HTML:
console:

#VemProReact
componentDidUpdate()
Dica MUITO IMPORTANTE:
Se você fizer um setState dentro do componentDidUpdate, sem qualquer tipo de condição, vai acontecer um loop "infinito"
Como o React é "bonzinho", ele vai interromper a execução e te mostrar um belíssimo erro:

#CuidadoComOcomponentDidUpdate()
#VemProReact
componentWillUnmount()
É executado quando o componente é desmontado!
Exemplo:
...
componentWillUnmount() {
console.log('MyComponent unmounted');
}
render() {
...HTML:
console:


#VemProReact
SASS / LESS
São pré-processadores de CSS
Não adicionam nada novo no CSS, simplesmente nos permite escrever CSS de forma mais prática
Podem ser comparados ao JSX, ou seja, nos permitem escrever código numa sintaxe mais prática.
Que depois será transpilado em um CSS puro (aquele que o browser entende).
#VemProReact
SASS
Na prática:
.App-logo-header button:disabled {
box-shadow: none;
opacity: 0.5;
cursor: not-allowed;
}
.App-logo-header button:first-of-type {
background-color: #4caf50;
}
.App-logo-header button:last-of-type {
background-color: #f44336;
}
......
.App-logo-header button:hover {
box-shadow: none;
}
.App-logo-header button:disabled {
box-shadow: none;
opacity: 0.5;
cursor: not-allowed;
}
.App-logo-header button:first-of-type {
background-color: #4caf50;
}
.App-logo-header button:last-of-type {
background-color: #f44336;
}Considere que esta declaração CSS, confusa e repetitiva:
#VemProReact
SASS
.App-logo-header {
margin: 30px auto;
display: inline-grid;
grid-template-columns: 200px 200px;
column-gap: 30px;
button {
padding: 6px 12px;
font-weight: 700;
text-transform: uppercase;
color: #fff;
border: none;
border-radius: 6px;
box-shadow: 0 3px 6px 1px #000;
cursor: pointer;
outline: none;
&:hover, &:disabled {
box-shadow: none;
}
... ...
&:disabled {
opacity: 0.5;
cursor: not-allowed;
}
&:first-of-type {
background-color: #4caf50;
}
&:last-of-type {
background-color: #f44336;
}
}
}Poderia ser simplesmente assim:
#VemProReact
SASS
Como usar SASS num projeto React?
#VemProReact
SASS
Instalamos o pacote node-sass:
yarn add node-sassRenomeamos os nossos arquivos .css para .scss:
E corrigimos os "import":
import './App.scss';
#VemProReact
Dúvidas?
#VemProReact
#Desafio!
Implementar uma calculadora, usando React, com todos números e as operações básicas
Fique à vontade para implementar funcionalidades extras e estilizar a calculadora da maneira que desejar
Quem mandar bem no teste vai ganhar um prêmio! \o/

#VemProReact
#Desafio!
Regras:
- Atualize o README.md do seu projeto
- Use JSX
- Use Arrow Functions
- Use props
- Use Destructuring Assignment
- Use state
- Use event handlers
- Use componentDidMount
- Use SASS
#VemProReact
#Desafio!
Referências:
Nossas aulas:
Tudo que fizemos até aqui:
Documentações:
#VemProReact
#Desafio!
Dicas:
Use Grid para definir a estrutura do layout:
Use Flexbox para fazer alinhamentos dentro dos grids:
Tente resolver um problema de cada vez
Escreva o código da maneira mais simples que conseguir
#Divirta-se!
Use sua criatividade e lembre-se: você é capaz!
#VemProReact
Obrigado!

#VemProReact #5
By Softplan Planejamento e Sistemas
#VemProReact #5
- 122