Criado por: Malcon Toledo
Como Instalar - Passo a Passo:
Sobre a estrutura dos arquivos:
O que é um componente?
Criação de componente em HTML
fala filho
Criação de componente em Javascript
const rootElement=document.getElementById('root')
const element = document.createElement('p')
element.innerHTML = 'fala filho'
element.className = 'mss'
rootElement.appendChild(element)
Criação de componente em React - padrão
const rootElement=document.getElementById('root')
const element = React.createElement ('p', {className:'mss' } , 'fala filho' )
ReactDOM.render(element, rootElement)
Criação de componente em React - jsx
function Componente1() {
return (
fala filho
);
}
export default Componente1
import React from 'react';
import ReactDOM from 'react-dom';
import Componente1 from './Componente1'
ReactDOM.render(<Componente1/>, document.getElementById('root'))
Criação de um "Class Component"
import React, { Component } from 'react';
export class Componente1 extends Component{
render(){
return (
fala filho
)
}
}
export default Componente1
import React from 'react';
import ReactDOM from 'react-dom';
import Componente1 from './Componente1'
ReactDOM.render(<Componente1/>, document.getElementById('root'))
Utilizando arquivo .CSS
import './componente.css'
function Componente1() {
return (
fala filho
- lista 1
teste 1
)
}
export default Componente1
Utilizando Stylesheet
Criando Styled Components
Como Instalar - Passo a Passo:
Styled Components
import styled from 'styled-components'
const BoxTexto = styled.p`
width: 300px;
background-color:#f00;
color: #fff;
`
function Componente1(){
return (
fala filho
)
}
export default Componente1
Styled Components - VANTAGENS
Compatibilidade de Browsers | |
Cada componente conhece apenas o seu CSS, uma mudança em um componente será refletida somente nele | |
Reduz a quantidade de requisições HTTP | |
É fácil a estilização dinâmcica usando as props | |
Facilidade de manutenção pois tudo fica no componente e não ha necessidade de abrir vários arquivos para efetuar eventual correção |
Ao invés de separar tecnologias artificialmente colocando markup e lógica em arquivos separados, o React separa conceitos com unidades pouco acopladas chamadas “componentes” que contém ambos.
Fonte: https://pt-br.reactjs.org
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
Exemplo 1
</head>
<body>
</body>
</html>
function Mensagem(){
function soma(a,b){
return a+b
}
const resultado = soma(2,2)
return(
A soma de 2 + 2 é: {resultado}
)
}
export default Mensagem
import React from 'react';
import ReactDOM from 'react-dom';
import Componente1 from './Componente1'
import Mensagem from './Mensagem'
ReactDOM.render(
<Componente1/>,
document.getElementById('root')
)
ReactDOM.render(
<Mensagem/>,
document.getElementById('mensagem')
)
function Relogio() {
let data = new Date().toLocaleTimeString()
return (
Hora atual: {data}
)
}
export default Relogio
import React from 'react';
import ReactDOM from 'react-dom';
import Relogio from './Relogio'
setInterval (
()=>(ReactDOM.render(
<Relogio/>,
document.getElementById('root')
)
), 1000 )
Props são informações que podem ser passadas para um componente.
import React from 'react';
import ReactDOM from 'react-dom';
import Componente1 from './Componente1'
ReactDOM.render(
<Componente1 mensagem="teste de mensagem" CorFundo="#546"></Componente1>,
document.getElementById('root')
);
import styled from 'styled-components'
const BoxTexto = styled.button`
width: 300px;
padding: 20px;
background-color: ${props => props.CorFundo || 'red'};
color: #fff;
&:hover {
background-color: black;
color: white;
}
`;
function Componente1(props){
return (
{props.mensagem + props.CorFundo}
)
}
export default Componente1
Objetivo: | Consolidar conhecimento de props |
import React from 'react';
import ReactDOM from 'react-dom';
import ListaUsuario from './ListaUsuario'
ReactDOM.render(
<ListaUsuario/>,
document.getElementById('root')
);
import styled from 'styled-components'
import ListaUsuarioLi from './ListaUsuarioLi'
const ListaUUL = styled.ul`
margin: 0px 0px 0px 0px;
list-style:cilcle;
padding: 20px 30px;
border: 1px solid #e1e1e1;
`;
function ListaUsuario(){
//lista de usuarios
const listaUsuarios = [
{nome: "malcon", codigo: 1, ferias:"sim"},
{nome: "Zé", codigo: 2, ferias:"não"},
{nome: "Ruela", codigo: 3, ferias:"não"},
]
return (
<ListaUUL>
{console.log(listaUsuarios)}
{listaUsuarios.map(user => <ListaUsuarioLi { ... user} /> )}
</ListaUUL>
)
}
export default ListaUsuario;
import styled from 'styled-components'
const ListaLi = styled.li`
border-bottom: 1px solid #81be9993;
padding-bottom: 10px;
margin-bottom: 10px;
`;
const Botao = styled.button`
padding: 10px;
background-color: #f00;
color: white;
&:hover {
background-color: black;
color: white;
cursor:pointer;
}
`;
const Coluna = styled.div`
width: 150px;
display: inline-block;
`
function ListaUsuarioLi(props){
return (
<ListaLi>
{props.nome}
Férias: {(props.ferias === 'sim' ? 'ok' : 'pendente')}
{(props.ferias === 'não' ? Conceder Férias : '' ) }
</ListaLi>
)
}
export default ListaUsuarioLi;
Objetivo: | Comunicação entre "filho" e "pai" |
import React from 'react';
import ReactDOM from 'react-dom';
import ListaUsuario from './ListaUsuario'
ReactDOM.render(
<ListaUsuario/>,
document.getElementById('root')
);
import styled from 'styled-components'
import ListaUsuarioLi from './ListaUsuarioLi'
const ListaUUL = styled.ul`
margin: 0px 0px 0px 0px;
list-style:cilcle;
padding: 20px 30px;
border: 1px solid #e1e1e1;
`;
function ListaUsuario(){
//lista de usuarios
const listaUsuarios = [
{nome: "malcon", codigo: 1, ferias:"sim"},
{nome: "Zé", codigo: 2, ferias:"não"},
{nome: "Ruela", codigo: 3, ferias:"não"},
]
function concederFerias(codUsuario){
alert("conceder férias para o usuário " + codUsuario)
}
return (
<ListaUUL>
{listaUsuarios.map(user => <ListaUsuarioLi mudaFerias={concederFerias} { ... user} /> )}
</ListaUUL>
)
}
export default ListaUsuario;
import styled from 'styled-components'
const ListaLi = styled.li`
border-bottom: 1px solid #81be9993;
padding-bottom: 10px;
margin-bottom: 10px;
`;
const Botao = styled.button`
padding: 10px;
background-color: #f00;
color: white;
&:hover {
background-color: black;
color: white;
cursor:pointer;
}
`;
const Coluna = styled.div`
width: 150px;
display: inline-block;
`
function ListaUsuarioLi(props){
return (
<ListaLi>
{props.nome}
Férias: {(props.ferias === 'sim' ? 'ok' : 'pendente')}
{(props.ferias === 'não' ? Conceder Férias : '' ) }
>
</ListaLi>
)
}
export default ListaUsuarioLi;
Objetivo: | Fazer o contador usando javascript |
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App'
ReactDOM.render(
<App/>,
document.getElementById('root')
);
import styled from 'styled-components'
const BtnIncrement = styled.button`
padding: 10px;
background-color: #f00;
color: white;
float: left;
&:hover {
background-color: black;
color: white;
cursor:pointer;
}
`;
const ValorContador = styled.div`
padding: 10px;
font-size: 30px;
line-height: 20px;
margin-left: 20px;
display:inline-block;
text-align: center;
width: 50px;
background-color: #f1f1f1;
`
function Incrementar(){
var numero = document.getElementById("contador").innerText;
numero++;
document.getElementById("contador").innerText = numero;
}
function App() {
return (
<BtnIncrement onClick={Incrementar}>Adicionar 1</BtnIncrement>
<ValorContador id="contador" >2</ValorContador>
);
}
export default App;
Objetivo: | Praticar uso do useState |
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App'
ReactDOM.render(
<App/>,
document.getElementById('root')
);
import React, { useState } from 'react'
import styled from 'styled-components'
const BtnIncrement = styled.button`
padding: 10px;
background-color: #f00;
color: white;
float: left;
&:hover {
background-color: black;
color: white;
cursor:pointer;
}
`;
const ValorContador = styled.div`
padding: 10px;
font-size: 30px;
line-height: 20px;
margin-left: 20px;
display:inline-block;
text-align: center;
width: 50px;
background-color: #f1f1f1;
`
function App() {
//definindo uma variável no state
//tem que ser definido dentro do componente
//React Hook "useState" cannot be called at the top level. React Hooks must be called in a React function component or a custom React Hook function
const [ valorContador, setValorContador ] = useState( 0 )
function Incrementar(){
setValorContador( valorContador + 1 )
}
return (
<BtnIncrement onClick={Incrementar}>Adicionar 1</BtnIncrement>
<ValorContador id="contador" >{ valorContador }</ValorContador>
);
}
export default App;
Objetivo: | Reforçar uso do useState |
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App'
ReactDOM.render(
<Relogio/>,
document.getElementById('root')
);
import React, { useState } from 'react'
function Relogio() {
function calculaTempoAtual(data) {
let hora = data.getHours().toString();
hora = (hora.length == 1 ? "0" + hora : hora);
let minuto = data.getMinutes().toString();
minuto = (minuto.length == 1 ? "0" + minuto : minuto);
let segundo = data.getSeconds().toString();
segundo = (segundo.length == 1 ? "0" + segundo : segundo);
let horas = `Hora Atual = ${hora}:${minuto}:${segundo}`
return horas;
}
//valor inicial do tempo
let tempoAgora = calculaTempoAtual(new Date);
//construindo o state
let [ tempoExibicao, setTempoAtual ] = useState(tempoAgora)
//atualizando state
setInterval(() => {
setTempoAtual(tempoExibicao = calculaTempoAtual(new Date))
}, 1000);
return (
{tempoExibicao}
)
}
export default Relogio
Objetivo: | Lembrar como é o "Mindset JavaScript" |
import React from 'react';
import ReactDOM from 'react-dom';
import CalculoIMC from './CalculoIMC'
ReactDOM.render(
<CalculoIMC/>,
document.getElementById('root')
);
.campo {
margin:20px 0px;
}
.resultado-container {
padding: 30px;
font-size: 30px;
}
.resultado {
color: #f00;
}
import React from 'react'
import './imc.css'
function CalculoIMC() {
function calcularIMC(){
let peso = document.getElementById("peso").value;
let altura = document.getElementById("altura").value;
let resultado = parseFloat(peso) / ( parseFloat(altura)*parseFloat(altura) ) ;
document.getElementById("resultado").innerText = resultado;
}
return (
Calculador de IMC
Resultado: resultado
)
}
export default CalculoIMC
Objetivo: | Saber mais sobre o "Mindset React" |
import React from 'react';
import ReactDOM from 'react-dom';
import CalculoIMC from './CalculoIMC'
ReactDOM.render(
<CalculoIMC/>,
document.getElementById('root')
);
import React, { useState } from 'react'
import styled from 'styled-components'
//criação dos componentes estruturais
const Campo = styled.div`
margin:20px 0px;
`;
const ResultadoCotainer = styled.div`
padding: 30px;
font-size: 30px;
`;
const Resultado = styled.div`
color: #f00;
`;
//função para calcular IMC
function CalculoIMC() {
let [peso, setPeso] = useState()
let [altura, setAltura] = useState(1)
let [resultado, setResultado] = useState()
//calcula efetivamente resultado do IMC
function mudaResultado(tipo, valor){
if (tipo=="peso") {
let resultado = parseFloat(valor) / ( parseFloat(altura) * parseFloat(altura) )
setResultado(resultado)
}
if (tipo=="altura") {
let resultado = parseFloat(peso) / ( parseFloat(valor) * parseFloat(valor) )
setResultado(resultado)
}
}
//incia processo de calculo do IMC
function calcularIMC(e){
if (e.target.id=="peso") {
setPeso(e.target.value)
mudaResultado("peso", e.target.value)
}
if (e.target.id=="altura") {
setAltura(e.target.value)
mudaResultado("altura", e.target.value)
}
}
return (
Calculador de IMC
<Campo>
</Campo>
<Campo>
</Campo>
<ResultadoCotainer>
Resultado: <Resultado>{resultado}</Resultado>
</ResultadoCotainer>
)
}
export default CalculoIMC