Instrutor: Leonardo Lana
Realização: Goomer
A Goomer nasceu para ser agente e companheira da evolução dos restaurantes. Acreditamos que a tecnologia não substitui, mas potencializa o trabalho humano.
Acompanhe o instrutor nas redes sociais!
Facebook -
Medium -
Twitter -
LinkedIn
Bibliotecas/Frameworks JavaScript estão sempre surgindo, então antes de tudo você deve aprender JavaScript de verdade!!!
React é uma biblioteca open-source desenvolvida pelo Facebook, para construção de interfaces(Componentes) em JavaScript com alta performance que permite composição e modularização de uma maneira muito simples.
O React foi desenvolvido com a seguinte missão:
"Como construir grandes aplicações com muitos dados que mudam frequentemente?"
São aplicações que carregam apenas uma vez a estrutura inicial e depois todas as outras ações/requisições/navegações são
feitas via ajax.
Exemplos: Facebook, Gmail
“Vamos por Partes”
Antes de começar abra sua mente para alguns conceitos um pouco difícies de aceitar no começo ...
Empty your mind...
HTML dentro do JavaScript, como assim?
As expressões javascript são avaliadas entre { }
Exemplo de iteração
this.props
this.state
O Virtual DOM é uma representação leve em memória do DOM.
A cada mudança de estado o React renderiza o componente novamente, mas para uma melhor performance ele utiliza
o virtual DOM.
A cada mudança de estado:
Através das propriedades que componentes passam dados para seus filhos. (
this.props
).
Props devem ser
read-only.
Componentes podem ter estados para gerenciar alguma lógica interna (
this.state
). Somente use
this.setState
para atualizar um estado. Toda vez* que atualiza o estado o
render
é chamado.
Através da composição podemos montar componentes complexos que são divididos em componentes menores e mais simples.
this.props.children
Criar um aplicativo com o create-react-app
create-react-app nome_do_projeto
npm start
O create-react-app é um pacote que nos permite criar aplicações web utilizando o React sem a necessidade fazer qualquer configuração. Todas as ferramentas necessárias para desenvolvimento e deploy já estão embutidas.
Arquivo | Descrição |
---|---|
README.md | Arquivo de orientações do create-react-app. Está em inglês. |
node_modules/ | Todas as dependências necessárias para o projeto. |
package.json | Arquivo de descrição do projeto. Possui informações como o nome, autor, versão e as dependências. |
public/ | Diretório que possui os arquivos públicos do seu projeto. Contém o html inicial. |
src/ | Pasta onde está contido todos os recursos do projeto, arquivos de imagem, css, javascript e afins. |
Para que o desenvolvedor não comece a desenvolver os componentes do zero, o projeto padrão já vem criado com alguns componentes para inspirar e servir como exemplo:
O package.json é o arquivo que descreve a sua aplicação. Ele contém informações importantes, como o nome do projeto, autor, data, versão, e-mail e a declaração de suas dependências.
{
"dependencies": {
"react": "^15.5.4",
"react-dom": "^15.5.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}
}
Comando | O que faz? | Resultado |
---|---|---|
start | Inicia o servidor de desenvolvimento | Na porta 3000 e abre o navegador automaticamente |
test | Inicia a execução dos testes | Executa os testes utilizando o Jest e exibe os resultados no próprio console |
run build | Reúne o aplicativo em arquivos estáticos para produção | Compila, traduz, minifica os recursos da aplicação e gera arquivos estáticos |
run eject | Remove a dependência do “react-scripts” e copia explicitamente as ferramentas de build, configurações e scripts dentro do diretório da aplicação | Remove a dependência do “react-scripts” e deixa tudo manual para controle do desenvolvedor |
Criar um novo componente na aplicação
false
no shouldComponentUpdate()
React tem um controle interno de eventos e só delega evento DOM na raiz da árvore de componentes, depois os eventos são gerenciados
pelo próprio React.
Os nomes dos eventos são lowerCamelCase:
onClick, onChange, onTouchStart
Utilizado para acessar diretamente o elemento, por exemplo um elemento DOM ou instância de um componente.
É uma técnica (pattern) para reusar lógica dos componentes. Ela emerge da natureza de composição do React.
Podemos passar aos descendentes funções callback para passar dados ao pai quando forem axecutadas pelo filho.
Vamos criar a aplicação de "todo-list" utilizando apenas create-react-app
Para ter certeza que o componente estará no DOM quando for utilizar alguma outra lib, devemos usar o evento componentDidMount()
Para Rotas é possível utilizar o React-Router https://github.com/reactjs/react-router
Os componentes React podem ser renderizados no servidor.
Node, Java, .NET, php etc...
Há três tipos de componentes React
Todo componente precisa de 3 coisas:
A sintaxe do JSX nos permite escrever o HTML no JavaScript!
class App extends Component {
render() {
return (
Welcome to React
To get started, edit src/App.js
and save to reload.
);
}
}
O ReactDOM é o responsável por fazer a ponte entre o React e o HTML
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import registerServiceWorker from './registerServiceWorker';
ReactDOM.render( , document.getElementById('root'));
registerServiceWorker();
Sim. Este é o mínimo necessário para se criar um Componente. Para componentes mais complexos, utilizamos Estados (States) e Propriedades (Props).
As propriedades são simples atributos que passamos para nossos componentes!
class App extends Component {
render() {
return (
);
}
}
No componente em questão, podemos acessar esta propriedade e usá-la!
class Example extends Component {
render() {
return (
{this.props.texto}
);
}
}
Estados guardam informações sobre o seu componente durante um período
Como por exemplo em um componente de relógio: para cada segundo você precisa atualizar o seu estado para poder mostrar a informação correta na tela
Como usar os estados para atualizar um texto de acordo com o input do usuário
Toda vez que apertamos o botão, alteramos o estado do componente e o
render
é invocado automaticamente
class App extends Component {
constructor(props) {
super(props);
this.state = {
input: ''
}
}
render() {
return (
Welcome to React
To get started, edit src/App.js
and save to reload.
this.setState({input: event.target.value})} />
);
}
}
this.props.nomeDaPropriedade
setState
. Suas informações são acessíveis por meio do
this.state.nomePropriedade
PropTypes
import PropTypes from 'prop-types';
class Greeting extends React.Component {
render() {
return (
Hello, {this.props.name}
);
}
}
Greeting.propTypes = {
name: PropTypes.string
};
class Greeting extends React.Component {
render() {
return (
Hello, {this.props.name}
);
}
}
// Specifies the default values for props:
Greeting.defaultProps = {
name: 'Stranger'
};
// Renders "Hello, Stranger":
ReactDOM.render(
,
document.getElementById('example')
);
class Greeting extends React.Component {
static defaultProps = {
name: 'stranger'
}
render() {
return (
Hello, {this.props.name}
)
}
}
O seu componente pode ter um estado inicial ou props iniciais
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = {count: props.initialCount};
}
// ...
}
React depende de algumas otimizações para ser performance, que greralmente está em seguir a style guide do react de boas práticas
Os componentes React utilizam atributos bem semelhantes ao que já estamos acostumados, mas são ligeiramente diferentes. No React os atributos são por padrão CamelCase . Por exemplo:
Habilita o reuso e criação de módulos css que são importados dentro da classe javascript. No qual fica no escopo local do arquivo que referenciou, porém, com um identificador global.
Também é possível usar SASS Modules
Toda a criação do CSS estará no javascript. Aliás não haverá mais CSS ou Sass em tempo de desenvolvimento
Vejamos a documentação
class Example extends Component {
render() {
return (
{this.props.texto}
)
}
}
export default Example;
O que é?
Como funciona?
São payloads de informação que é enviado para a sua store.
Ele específica uma troca de estado em resposta a action que é enviado para a store.
Se a action representa "o que aconteceu" e o reducer atualiza o estado de acordo com as actions.
A store conecta as actions com os reducers.
A arquitetura do Redux gira em torno do fluxo unidirecional de dados.
São patterns para aplicações React.
Grandes aplicações como Facebook, Instagram, WhatsApp Web, NetFlix, Yahoo Mail, Khan Academy, FlipBoard, BBC, Periscope Web,
dentre outras, já utilizam React.js.
No Brasil várias empresas já estão com algum produto com React, por exemplo: Goomer, Globo, Nubank, B2W,
Buscapé, Catho, OLX, Pipefy entre outras...
Adicionar o redux ao nosso Todo-List
yarn add prop-types react-redux redux redux-thunk
Existem alguns type checkers como Flow e TypeScript. Eles identificam problemas antes de executar o seu código.