"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Dominando o design de componentes no React: do básico às melhores práticas

Dominando o design de componentes no React: do básico às melhores práticas

Publicado em 31/10/2024
Navegar:760

Mastering Component Design in React: From Basics to Best Practices

React se tornou uma estrutura ideal para desenvolvedores que buscam criar aplicativos da web dinâmicos e interativos. Sua arquitetura baseada em componentes permite que os desenvolvedores criem blocos de construção reutilizáveis ​​que tornam o desenvolvimento da UI mais gerenciável e escalonável. Mas para realmente dominar o React, é fundamental entender como projetar componentes eficientes e reutilizáveis. Neste blog, exploraremos os fundamentos do design de componentes, padrões avançados e práticas recomendadas para ajudá-lo a construir aplicativos React escalonáveis.

1. A Fundação: Compreendendo os Componentes do React

Em sua essência, um componente React é uma função ou classe JavaScript que aceita entradas (props) e retorna JSX, que descreve o que deve aparecer na tela.

Existem dois tipos principais de componentes:

  • Componentes funcionais: introduzidos como componentes sem estado, eles evoluíram para lidar com estados e efeitos colaterais por meio de React Hooks. A maioria das bases de código React modernas prefere componentes funcionais por sua simplicidade e benefícios de desempenho.

  const Button = ({ label }) => ;


  • Componentes de classe: Esses já foram a principal maneira de lidar com o estado do componente, mas caíram em desuso com o advento dos ganchos. No entanto, compreendê-los ainda pode ser útil ao trabalhar em projetos legados.

class Button extends React.Component {
  render() {
    return ;
  }
}


2. Construindo Componentes Reutilizáveis

Componentes reutilizáveis ​​são a base de qualquer aplicativo React escalável. Aqui estão alguns princípios a seguir:

um. Use acessórios de maneira eficaz

Props permitem que os dados fluam dos componentes pai para filho. Ao projetar componentes reutilizáveis, certifique-se de que eles aceitem adereços dinâmicos para torná-los flexíveis para vários contextos.

Exemplo: componente de botão com acessórios dinâmicos


const Button = ({ label, onClick, size = 'medium', variant = 'primary' }) => {
  return (
    
  );
};


Neste exemplo, Button é reutilizável porque aceita adereços como rótulo, onClick, tamanho e variante, tornando-o adaptável em todo o aplicativo.

b. Composição sobre herança

Em vez de estender componentes, use composição para construir componentes mais complexos. Esta abordagem está alinhada com a filosofia do React de tornar os componentes independentes e unidades desacopladas.

Exemplo: Compondo um Modal com um Botão


const Modal = ({ isOpen, onClose, children }) => {
  if (!isOpen) return null;

  return (
    
{children}
); };

O componente Modal é composto pelo componente Button para criar um modal reutilizável que pode ser preenchido com qualquer conteúdo (filhos).

3. Padrões de componentes avançados

À medida que seu aplicativo cresce, componentes simples podem não ser suficientes. Aqui estão alguns padrões avançados para gerenciar a complexidade.

um. Componentes de ordem superior (HOCs)

Um componente de ordem superior é uma função que pega um componente e retorna um novo, geralmente injetando adereços ou lógica adicionais.

Exemplo: registro HOC


const withLogging = (WrappedComponent) => {
  return (props) => {
    console.log('Component rendered with props:', props);
    return ;
  };
};

const EnhancedButton = withLogging(Button);


Este HOC envolve o Button e registra seus adereços sempre que ele é renderizado, adicionando funcionalidade extra sem modificar o componente original.

b. Renderizar adereços

Este padrão envolve passar uma função como um suporte para compartilhar lógica entre os componentes.

Exemplo: buscar componente com acessórios de renderização


const Fetch = ({ url, render }) => {
  const [data, setData] = React.useState(null);

  React.useEffect(() => {
    fetch(url)
      .then((response) => response.json())
      .then((data) => setData(data));
  }, [url]);

  return render(data);
};

// Usage
{JSON.stringify(data)}
} />;

Aqui, Fetch não se importa como os dados são renderizados. Em vez disso, ele delega a renderização ao suporte de renderização, tornando-o altamente flexível.

c. Ganchos personalizados

Ganchos personalizados são uma maneira poderosa de compartilhar lógica entre componentes, mantendo-os limpos e legíveis. Os ganchos permitem encapsular a lógica que pode ser reutilizada entre os componentes.

Exemplo: gancho personalizado para largura da janela


const useWindowWidth = () => {
  const [width, setWidth] = React.useState(window.innerWidth);

  React.useEffect(() => {
    const handleResize = () => setWidth(window.innerWidth);
    window.addEventListener('resize', handleResize);

    return () => window.removeEventListener('resize', handleResize);
  }, []);

  return width;
};

const MyComponent = () => {
  const width = useWindowWidth();
  return 
Window width: {width}
; };

Este gancho useWindowWidth pode ser usado em qualquer componente para rastrear o tamanho da janela sem duplicar a lógica.

4. Gerenciando o Estado de forma eficaz

O gerenciamento de estado é um dos aspectos mais cruciais do design de componentes React. Embora o estado local funcione bem para aplicativos pequenos, aplicativos maiores podem exigir uma solução mais robusta.

um. Elevando o Estado

Quando vários componentes precisam compartilhar o estado, a solução é mover (ou "elevar") o estado para o ancestral comum mais próximo.


const ParentComponent = () => {
  const [count, setCount] = React.useState(0);

  return (
    
); };

b. API de contexto

A API Context é útil para passar dados globais através da árvore de componentes sem a necessidade de detalhamento.


const ThemeContext = React.createContext();

const Parent = () => {
  const [theme, setTheme] = React.useState('light');

  return (
    
  );
};

const Child = () => {
  const theme = React.useContext(ThemeContext);
  return 
The theme is {theme}
; };

A API Context é ótima para dados globais, como temas, dados do usuário ou configurações de localidade.

c. Usando bibliotecas de gerenciamento de estado

Para aplicativos maiores, bibliotecas como Redux ou Zustand podem ajudá-lo a gerenciar estados complexos em seu aplicativo com eficiência. Redux é ótimo para aplicativos que exigem um estado centralizado, enquanto Zustand oferece uma solução mais leve.

5. Otimizando o desempenho

À medida que seu aplicativo cresce, o desempenho pode se tornar um problema. Aqui estão algumas técnicas para manter os componentes rápidos e responsivos.

um. Memoização com React.memo

React.memo evita novas renderizações desnecessárias memorizando a saída do componente com base em seus adereços.


const ExpensiveComponent = React.memo(({ data }) => {
return

{data}
;
});




b. useCallback e useMemo

Esses ganchos ajudam a memorizar funções e valores, garantindo que eles não sejam recriados em cada renderização, a menos que as dependências mudem.


const MyComponent = ({ onClick }) => {
const handleClick = React.useCallback(() => {
console.log('Button clicked!');
}, []);

return ;
};




Conclusão

Dominar o design de componentes React é essencial para construir aplicativos web eficientes e escaláveis. Ao focar em componentes reutilizáveis, adotar padrões avançados como HOCs e ganchos personalizados, gerenciar o estado de forma eficaz e otimizar o desempenho, você pode criar aplicativos que são flexíveis e de fácil manutenção.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/ishanbagchi/mastering-component-design-in-react-from-basics-to-best-practices-1gih?1 Se houver alguma violação, entre em contato com study_golang@163 .com para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3