🔰 Intervução
Nesse Post Vamos Criar Nossa Primeira Aplicação React utilizando o Шаблон Create-React-App e TypeScript , UM Superset de JavaScript Que Adiciona Tipagem e várias autra funcionalidades mais atuais da linguagem.
📝 Pré-Requisitos
- Node.js instalado na sua vesão lts.
- VSCODE OU Qualquer Outro Editor de Código Da Sua Prepetencia.
- UM Browser Qualquer.
⚠ Учебное пособие Esse foi desenvolvido utilizando o linux, e Office Que algum comando talvez não funcione exatamente no windows ou mac. Nesses Casos, Google é Seu Melhor Amigo.
🔭 conhecendo o projeto
Nós Vamos Criar Um Projeto Chamado de Gofinances, Um Gerenciador de Gastos. NELE VAMOS PODER CADASTRAR SAídas E Entradas de Dinheiro, Alem de Informar A Catchoria Desse Valor.
Algo Básico, Mas um bom projeto para keyçar.
💻 Criando projeto com cra
Primeiramente Escolha Акса -аксес -vose vai trabalhar no seu novo ecesse ele pelo терминал. SE TIVER INTALADO CORRETAMETAMETE O NODE, VOCE TERA ACESSO A UM COMANDO THAMADO npx
Анкет Компания ELE ESIVERESAR CODIGOS EXTERS SEM необходим для Baixá-Los E Instalá-Los Em Nossa Máquina.
O comando opploo é:
npx create-react-app go-finances --template=typescript
O Que targina cada parte desse comando:
npx
IRESA O COMANDO.Создать-реакт-приложение
é pacote que será usado para criar o template da nossa aplicação.уход
é o nome do projeto.--template = typeScript
é Para sobrescrever o Шаблон Падран Пара О Que utiliza O TypeScript.
Após Rodar Esse Comando, O Projeto e Todas suas Devestingências ameçaram A Serem bixadas, E AssiM Que Terminar, Bastar Rodar …
cd go-finances
… Пара -вход на макароны, делая projeto, e …
npm start
… para abrir no seu браузер Падран.
Você deve ver uma tela como essa:
Abrindo o projeto no vscode vamos incontrar uma estrutura como essa:
├── package.json ├── public │ ├── favicon.ico │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt ├── README.md ├── src │ ├── App.css │ ├── App.test.tsx │ ├── App.tsx │ ├── index.css │ ├── index.tsx │ ├── logo.svg │ ├── react-app-env.d.ts │ ├── reportWebVitals.ts │ └── setupTests.ts ├── tsconfig.json └── yarn.lock
Vamos goveCar a Essa estrutura. На паста public
Vamos deixar apenas o index.html
E favicon.ico
Анкет Dentro do index.html
Vamos apagar Tudo Que néao é EssentiaRio Por Agora Deixando Apenas:
Go Finances
Tá Vendo Essa
? É dentro dela que toda nossa aplicação vai ser renderizada pelo React. Enthao ela é bem Нюаааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа
На паста SRC
, Vamos deixar App.tsx
, index.tsx
e React-app-env.d.ts
por enquanto e mudando o conteúdo do index.tsx
Para:
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App'; ReactDOM.render(, document.getElementById('root') );
Esse arquivo é A Entrada Da Nossa Aplicação. Нет FIM DO ARQUIVO Dá PrAr Ver Que a Lib Реакт-де
renderiza o conteúdo do primeiro parâmetro na
Анкет
Агора О App.tsx
:
function App() { return (); } export default App;Edite src/App.tsx e salve para recarregar.
Aprenda React
Se você não cancelou o npm start
, Basta Acessar No Seu Browser http://localhost: 3000 E Verá Algo Como Isso:
⚠ Vale ressaltar de que desde a vesãa no React nãa é mais recient o react em cada arquivo. SE VOCE TRABALHANDO EM UM PROJETO EM UMA VERSERODER, EREASTIO ADICIONAR импорт Реагировать из 'React'
на Primeira Linha do App.tsx
Анкет E não se esqueça do Экспорт по умолчанию nome-do-componente
, SEM ELE O Componente, NãO PODERá Ser Amimmentado Em Outro Arquivo.
📦 Компонентизация
Esse é o um dos mais cantceitos do React e você já está utilizando. Tudo na nossa aplicação é Um Componente. O arquivo App.tsx
Eo Componente Принципал Десса Апелькасао. O Que define um componente para mim é: “Uma funcáo que quebe parâmetros e retorna um conteúdo jsx”.
OS Parâmetros ficam para o próximo tópico, mas o que é jsx?
Jsx é o html Dentro do JavaScript. Нет nosso caso usando typescript os aquivos que sow componentes temminação *.tsx
. Lembrando que todos componentes devemiar com letra maiúscula.
Todo Componente Pode Ser Amitormalado E Utilizado Dentro de Outro Componente, oute mesmo dentro um arquivo normal ts (ou js).
Vamos Criar O Primeiro Componente Que Será O Header (CabeCalho). Primeiro, Dentro Da Pasta SRC
, Vamos Criar Uma Pasta Компоненты
Onde Ficaram Guardados Todos Nossos Componentes. Criaremos um arquivo assim:
// components/Header.tsx function Header() { return () } export default HeaderGo Finance
E Impormaremos Нет App.tsx
:
import Header from "./components/Header"; function App() { return (); } export default App;
Agora Com Esse Componente de Header Podemos reutilizá-lo em todas в качестве Telas, E Se Qualquer Mudança для необходимости Basta Alterarar O Componente E A Mudança Será Refletida Em Todas в качестве Теласа.
🔧 Propriedade
Como fazemos para alterar um componente sem ter que mudar o código? E em cada tela diferente quisésemos que o texto dentro. É aí que entra как пропридад.
// components/Header.tsx type HeaderProps = { title?: string } function Header(props: HeaderProps) { return () } export default Header{props.title ?? 'Go Finances'}
Todas As Propriedades de um componentee vem dentro do Argemento реквизит
. Já Que estamos utilizando typescript vamos Tipar как пропридад, то Tipo Headerprops
Indicando que o objeto реквизит
ТЕМ ГЛАВНА заглавие
que deve ser uma нить
. Para adicionar o Valor no JSX BASTA Colocar A Variavel props.title
Entre {} Анкет Caso nada seja passado para essa propriedade o Valor padrão é Go Finances Анкет
Podemos melhorar esse código utilizando de Desestruturação :
// components/Header.tsx type HeaderProps = { title?: string } function Header({ title = 'Go Finances' }: HeaderProps) { return () } export default Header{title}
E Нет App.tsx
:
import Header from "./components/Header"; function App() { return (); } export default App;
Para passar um valor que não seja string utilizamos {} :
// number// array //object // true or //false
UMA Propriedade Especial que o proprio React adiciona é oe дети
Que nada Mais é que o conteúdo de um componentee. Представьте себе Que dentro, заголовок Queremos Passar Também OS ссылки, Como Podemos Fazer Isso?
// components/Header.tsx import { ReactNode } from "react" type HeaderProps = { children?: ReactNode } function Header({ children } : HeaderProps) { return () }Go Finances
Vamos voltar o código para como estava Нет FIM Нет TOPICO DE COMPONENTIZICAção.
💡 Estado E Imutabilidade
Vamos criar um novo componente para essa essa explicaço e importionar Нет App.tsx
Para ver na tela:
// components/TransactionList.tsx function TransactionList() { return ( ) } export default TransactionList
import Header from "./components/Header"; import TransactionList from "./components/TransactionList"; function App() { return ( <>); } export default App;
📌 O React não aceita que o возвращаться
Tenha mais de um componente diretamente um abaixo do wutro, por isso estamos utilizando o <>
POR VOLTA DOS DOIS. ELES SERVEM PARA AGRUPAR OS COMPONENTES SEM TER QUE RENERIZAR Ума em volta por Пример.
Нет компонента TransactionList.tsx
Vamos Salvar Uma Lista Fictícia de transações e tentar renderiza-las em Ума
:
// components/TransactionList.tsx function TransactionList() { const transactions = [ '-R$ 100,00 - Compra de Alimentos - 22/11/2020', '-R$50,00 - Gasolina - 20/12/2020', 'R$32,00 - Investimento - 22/12/2020' ]; return (
-
{transactions.map((transaction, i) => (
- {transaction} ))}
Criamos inicialmente uma lista de Strings que contém nossas transações. Depois retornamos no componente uma lista (
) que renderiza todos как транзакции
Através de um карта
QUE RETORNA UMA que temo como conteúdo cada item da nossa lista.
Há Também a Propriedade ключ
que recebe um valor único entre os elementos da lista. Como não Temos Essa Valor Ainda, Vamos colocar o Индекс де Када Трансасао.
A Documentação DIZ:
Поскольку chaves ajudam o реагирует на идентификационную часть sofreram alterações, foram adicionados ou removidos.
A chave deve ser colocada no elemento mais “externo” do retorno do карта
Анкет Caso você não coloque aparecerá um erro como esse:
Vamos Agora Criar Um Botão Para adicionar Uma Nova Transação na Lista.
// components/TransactionList.tsx function TransactionList() { const transactions = [ '-R$ 100,00 - Compra de Alimentos - 22/11/2020', '-R$50,00 - Gasolina - 20/12/2020', 'R$32,00 - Investimento - 22/12/2020' ]; function handleAddTransaction() { console.log('clicado') } return ( <>
-
{transactions.map((transaction, i) => (
- {transaction} ))}
Para adicionar uma funcão que é disparada ao clicar Нет Ботаа, Баста Криар Фунсао Эдициона-ла Пропридада Onclick
Анкет Teste no seu projeto e veja no console ( ctrl + shift + i
) do Browser se está funcionando.
SE Mudarmos o Código da Funcão para adicionar Uma nova transação na lista ficaria assim:
function handleAddTransaction() { transactions.push('Nova transação') console.log(transactions) }
Porém se abrirmos nossa aplicação e clicarmos no botão veremos que a tela não é atualizada, mas no console aparece que a lista está getbendo novos.
Isso acontece porque o React nãa sabe que deve atualizar a tela apenas de mudarmos o Valor da variável транзакции
. Temos Que Criar Um Estado Que Guardará a Lista de Transações. Para isso utilizaremos o Hook USESTATE Анкет
// components/TransactionList.tsx import { useState } from "react"; function TransactionList() { const [transactions, setTransactions] = useState([ '-R$ 100,00 - Compra de Alimentos - 22/11/2020', '-R$50,00 - Gasolina - 20/12/2020', 'R$32,00 - Investimento - 22/12/2020' ]) function handleAddTransaction() { console.log(transactions) } return ( <>
-
{transactions.map((transaction, i) => (
- {transaction} ))}
O USESTATE
RETORNA UM Array, Sendo A Primeira Posição a Valor Real Do Estado E Como Segunda posição Uma Funcão utilizada para alterar esse estado.
Como Parâmetro Elece o Valor Inicial Do Estado. Нет Nosso Caso São OS Valores Das Primeiras Transações de Teste.
Para Alteramos o Valor de транзакции
Пассамос o novo Valor Para A Funcáo Settransactions
. AI Entra A имутабилидада. Néao Devemos Alterar o Valor Do Estado Diretamente Como Fizemos Aderthmente USANDO Transactions.push ('nova transação')
. Devemos criar Uma nova dista de transauses que contenha os valors передние дату a adicionando o novo valor:
function handleAddTransaction() { setTransactions([...transactions, 'Nova Transação']) }
Assim deixamos, груз реагирует Alterar O Estado, E Semescentemente Alterar A Tela.
Утилизамос o USESTATE
quando precisamos salvar um valor que será utilizado para alterar a tela ou algum componente. Poderia ser por exemplo o número de notificaçes não lidas pelo usuário, ou o número de likes em foto oute a ae a dista de comentários de uma postagem. Todos Sãao Valors Que, Se Alterados, Devem Alterar o Que o usuário vê.
😅 Só Isso Tudo?
É bastante coisa para aprender de Uma Vez. O Que eu anconselho é Esse ese o o próximo turniory você teste algumas das suas ideias utilizando Componentizicação , Propriedade e Эстадо . Talvez Criar UM Pequeno intador que diminui e aumente o Valor Probodo Poriedade … Бем Сан -Инфинитас возможностей.
SE для Seguir Meu Conselho Tente Algo Simples, nada de tentar keecar com a proxima ideia revolucionaria de uma nova empresa do elon musk.
Bem … Por Enquanto, Isso é tudo Pessoal!
Нет PRóximo post vamos iniciar de verdade nosso projeto já estilizando aplicação.
PS: UM Agradecimento Especial💜 oo pessoal da RocketSeat 🚀 Pelo Conteúdo de Qualidade Em React.
Оригинал: “https://dev.to/brunolipea/react-como-iniciar-um-projeto-5ekd”