Os tópicos do Passo a Passo de Projetos React JS são os seguintes:
- Por que Frameworks Front-end existem
- Libraries x Frameworks
- React x JavaScript puro - Um comparativo
- Por que usar React JS
- Como é desenvolver com React puro
- O que é JSX e qual problema ele resolve
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Opções modernas para criar um novo projeto React
- Vite x Next JS - Qual usar
- Configurando o ambiente de desenvolvimento
- ES Modules
- Strict mode e renderização do root component
- O que é um componente React
- Como reutilizar componentes do jeito certo
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Lógica em componentes
- Separação de responsabilidades
- CSS em projetos React JS
- O que são props e como criá-las do jeito certo
- Imutabilidade e Fluxo de dados em mão única (one-way data flow)
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- As regras do JSX
- O jeito certo de renderizar listas
- O que é Renderização condicional e por que criá-las
- Renderização condicional com &&
- Renderização condicional com ternário
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Renderização condicional de classe CSS e conteúdo textual
- Como extrair JSX para um novo componente do jeito certo
- Aplicando Destructuring Assignment em props
- O que é e por que usar React Fragment
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- O jeito certo de manipular eventos no React
- O que é um Hook e qual problema ele resolve
- O jeito certo de usar o Hook useState
- O estado por baixo dos panos (não vou falar de política)
- Como usar o React Developer Tools do jeito certo
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Como atualizar o estado baseando-se no estado atual
- Estado x Props - Quais as diferenças entre eles
- Uma recapitulação sobre estado
- Uma introdução a formulários no React
- O que são componentes controlados e não-controlados
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Desafio: Projeto 1
- Visão geral e especificações do projeto
- Desenvolvendo a marcação estática do projeto
- Renderizando a lista de itens
- Construindo o form
- Fundamentos do gerenciamento de estado no React
- O jeito certo de elevar um estado
- Como comunicar de filho pra pai do jeito certo
- Uma operação complexa com imutabilidade
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- O que é um estado derivado
- Calculando com estado derivado
- O jeito certo de ordenar itens de uma lista
- Como limpar uma lista
- Organizando componentes em arquivos separados
- Construindo um componente reutilizável
- A prop children
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Desafio: Projeto 2
- Visão geral e especificações do projeto
- Desenvolvendo a marcação estática do projeto
- Renderizando a lista de itens
- Construindo o form
- Criando componentes controlados
- Projeto 3
- Visão geral e especificações do projeto
- Configurando o ambiente
- O jeito certo de dividir uma UI em componentes React
- Categorizando componentes
- Perfuração de props (Prop Drilling)
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Composição de componentes
- Solucionando o problema de prop drilling
- Criando um componente reutilizável através de composição
- Uma alternativa a children: exposição de múltiplos componentes
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Como construir um componente reutilizável de avaliação
- Criando o objeto de avaliação
- Manipulando eventos de hover
- Props como API de componente
- Melhorando a reutilização do componente
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- O ciclo de vida de um componente
- O jeito errado de executar requisições no React
- O jeito certo de executar requisições: o Hook useEffect
- Criando um estado de carregamento
- Tratando erros
- O array de dependências do Hook useEffect
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Sincronizando requisições e dados
- Selecionando um componente do projeto
- Renderizando informações da resposta da requisição
- Fazendo o título da aba reagir a mudanças do estado
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- A função de limpeza do Hook useEffect
- Aprofundando o conhecimento sobre Hooks
- A regras dos Hooks
- Nuances do Hook useState
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- O jeito errado de selecionar elementos do DOM no React
- O Hook useRef
- Persistindo dados entre renderizações
- Quando criar um Hook personalizado
- O jeito certo de criar um Hook personalizado
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Criando um Hook personalizado para manipular adição e remoção de um evento
- O Hook useReducer
- Gerenciando partes relacionadas do estado
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Projeto 4
- Visão geral e especificações do projeto
- Fazendo requests para a API
- Lidando com os status de requests
- Renderizando as informações iniciais
- Implementando a lógica para manipular um novo estado
- Exibindo o progresso do usuário
- Desenvolvendo a interface final da aplicação
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Implementando a lógica de um timer com o Hook useEffect
- useState x useReducer - Quando usar um Hook ou o outro
- Projeto 5
- Visão geral e especificações do projeto
- Conhecendo o React Router
- O que é SPA (Single Page Application)
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Implementando as principais rotas do projeto
- Opções de estilização CSS em projetos React
- Construindo as páginas do projeto
- Desenvolvendo a marcação estática do projeto
- Renderizando as listas do projeto
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Implementando rotas dinâmicas
- Lendo e setando uma query string
- Usando um Hook personalizado para navegar de forma automatizada
- Apresentando a Context API
- Criando e provendo uma context na prática
- Consumindo uma context na prática
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Implementando um componente provider e um Hook personalizado
- Criando um novo context no projeto
- Finalizando uma view do projeto
- Criando a adição de um objeto no projeto
- Criando a deleção de um objeto
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Criando uma context para mais uma feature da aplicação
- Implementando o login
- Protegendo uma rota contra acesso não-autorizado
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Visão geral sobre otimização de performance: evitando renders desnecessários
- Como usar o Hook useMemo do jeito certo
- Conhecendo o Hook useCallback
- Otimizando re-renders de context
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Otimizando o tamanho do bundle com code-splitting
- Como não otimizar de forma prematura
- Regras e boas práticas no uso do Hook useEffect
- Setando um estado baseado na atualização de outro estado
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- O que é React Query e qual problema ela resolve
- Configurando a React Query
- Fazendo requisições com a React Query
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Uma visão geral de padrões avançados em React
- Bateria de Desafios
- Resolução da Bateria de Desafios anterior
- Fazendo deploy no Netlify
- Fazendo deploy na Vercel
- O que é o Next JS e qual problema ele resolve
- Quando usar ou não usar Next JS
- Criando uma aplicação Next.js
- Roteamento baseado em arquivos e params
- Agrupamento de rotas
- Criando layouts reutilizáveis com Layout Components
- Como funciona a navegação por baixo dos panos no Next JS
- O Hook useRouter
- Server Components x Client Components - Quando usar um ou outro
- Renderizando Server Components
- Requisição de dados com Server Components
- Criando API Routes
- Gerando static params para rotas dinâmicas
- Lidando com erros - Error Boundaries
- Mutação de dados
- Opções de estilização CSS em projetos NextJS