Publicado em: 17/03/2025

Au 08 - Front-end - React - Filtrando dados na lista - Mestres BEGIN


Objetivo da Aula

Criar um sistema de filtragem dinâmica onde:

  • Um slider (RangePriceFilter) controla a faixa de preço
  • A lista de produtos atualiza em tempo real
  • Os componentes se comunicam eficientemente

Arquitetura da Solução

ProductsPage (Estado Principal) ->  ProductSubHeader (Intermediário) ->  RangePriceFilter (Disparador)

O desafio técnico principal é o prop drilling, onde:

  • Dados precisam atravessar 3 níveis hierárquicos
  • Componentes intermediários repassam props sem usá-las
  • A manutenção torna-se complexa

Implementação com Callbacks

Solução através de comunicação ascendente:

1// Definição de tipos
2 interface RangePriceFilterProps {
3 value: number;
4 onPriceChange?: (value: number) => void;
5 }

Fluxo de Eventos:

  1. Slider detecta mudança
  2. Executa onPriceChange
  3. ProductsPage atualiza estado
  4. Lista refiltrada é renderizada

Componente Controlado

RangePriceFilter como componente totalmente controlado:

1const RangePriceFilter = ({ value, onPriceChange }: RangePriceFilterProps) => {
2 const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
3 const newValue = parseInt(e.target.value); onPriceChange?.(newValue);
4 // Notifica o pai
5 }; return ( <input type="range" min="0" max="1000" value={value}
6 // Controlado externamente onChange={handleChange} /> ); };

Boas Práticas:

  • Single Source of Truth (valor controlado pelo pai)
  • Tipagem precisa com TypeScript
  • Tratamento seguro de callback opcional (?.)

Monitoramento com DevTools

Identificamos oportunidades de otimização:

  • Re-renders excessivos ao mover o slider
  • Componentes estáticos sendo recalculados
  • Possível uso de:
    • React.memo para memoização
    • useCallback para callbacks estáveis
    • Debounce para eventos frequentes

Evolução da Arquitetura

Estágio AtualPróximos PassosBenefícios
Prop DrillingContext APIRedução de props intermediárias
Re-renders globaisComponentes MemorizadosRenderização seletiva
Filtro instantâneoDebounce (300ms)Menos cálculos durante interação

Princípios Fundamentais

Fluxo Unidirecional

Dados fluem para baixo, eventos para cima

Single Source of Truth

Estado centralizado em ProductsPage

Separação de Responsabilidades

RangePriceFilter (UI) vs ProductsPage (Lógica)

Considerações Finais

"A simplicidade é pré-requisito para a confiabilidade."
- Edsger Dijkstra

Pontos Positivos

  • Implementação direta e didática
  • Fácil entendimento do fluxo de dados
  • Base sólida para evolução

Limitações Atuais

  • Prop drilling em aplicações maiores
  • Re-renders desnecessários
  • Dificuldade para adicionar múltiplos filtros

Próximas Melhorias

  1. Implementar Context API para estado compartilhado
  2. Adicionar mais campos de filtragem (categoria, marca)
  3. Otimizar performance com memoização
  4. Melhorar UI/UX da lista de produtos
Fernando Cunha
Artigo deFernando Cunha

Com mais de 15 anos de experiência em tecnologia e formado pela FAAP em Administração de empresas, hoje é o CEO da Mestres da Web, empresa referência no mercado nacional e com projeções de expansão internacional.

últimos vídeos

veja nossos vídeos mais recentes e esteja por dentro de muitas novidades.

Au 02 - Front-end - React - Estrutura de projeto - Mestres BEGIN
play

Au 02 - Front-end - React - Estrutura de projeto - Mestres BEGIN

Explorando a estrutura gerada pelo Create React App, entendendo o papel das pastas public e src, os conceitos de Virtual DOM, JSX e componentes, além de como o CSS é aplicado nos projetos React.

Autor deste artigo
Fernando Cunha17/03/2025
Au 03 - Front-end - React - Criando layout da nossa aplicação - Mestres BEGIN
play

Au 03 - Front-end - React - Criando layout da nossa aplicação - Mestres BEGIN

Explorando a criação de um layout fixo para a aplicação React, com barra lateral, barra superior e área dinâmica para conteúdo. Utilizando o React Router Dom v6 para gerenciar navegação entre rotas.

Autor deste artigo
Fernando Cunha17/03/2025
Au 04 - Front-end - React - Estilizando o layout da aplicação - Mestres BEGIN
play

Au 04 - Front-end - React - Estilizando o layout da aplicação - Mestres BEGIN

Abordando técnicas para organizar estilos em React, utilizando seletores CSS, CSS Modules, integração com React Router, reset CSS eficiente e boas práticas para garantir consistência visual e manutenibilidade.

Autor deste artigo
Fernando Cunha17/03/2025