Skip to content

React Hooks ​

Hooks são funções que permitem "conectar" o estado e os recursos de ciclo de vida do React a partir de componentes funcionais.


Hooks Básicos ​

1. useState ​

Gerencia estado local em um componente.

javascript
const [count, setCount] = useState(0);

2. useEffect ​

Lida com efeitos colaterais (chamadas de API, assinaturas, timers). Ver Guia Detalhado do useEffect

3. useContext ​

Acessa dados de um contexto sem precisar passar props manualmente em todos os níveis.


Hooks de Performance ​

1. useMemo ​

Memoriza um valor calculado para evitar recalculá-lo em cada renderização. Ver Guia Detalhado do useMemo

2. useCallback ​

Memoriza uma definição de função para evitar que seja recriada em cada renderização. Ver Guia Detalhado do useCallback


Custom Hooks (O Coração da nossa Arquitetura) ​

No nosso projeto, utilizamos Custom Hooks para separar a lógica da interface.

Por que criar Custom Hooks? ​

  1. Reutilização: Lógica que se repete em vários componentes.
  2. Organização: Deixa o componente visual limpo e focado em renderizar a UI.
  3. Testabilidade: Facilita o teste da lógica de forma isolada.

Padrão de Tela (*-screen.hooks.ts) ​

Toda tela (.screen.tsx) deve ter seu próprio hook de interface.

typescript
// appointment-screen.hooks.ts
export function useAppointmentScreen() {
    const [filter, setFilter] = useState('all');
    const { data, isLoading } = useGetAppointments(filter); // Hook da camada Feature

    function handleFilterChange(newFilter: string) {
        setFilter(newFilter);
    }

    return {
        data,
        isLoading,
        handleFilterChange
    };
}

Regras dos Hooks ​

  1. Apenas no Topo: Não chame Hooks dentro de loops, condições ou funções aninhadas.
  2. Apenas em Funções React: Chame Hooks apenas em componentes funcionais ou em outros Custom Hooks.
  3. Prefixe com use: Todo hook deve começar com a palavra use (ex: useUser, useForm).

Quando criar um Custom Hook? ​

  • Sempre que houver lógica de estado complexa: Se o seu componente tem muitos useState ou useEffect, extraia-os.
  • Integração com a Camada de Aplicação: Para abstrair chamadas ao TanStack Query ou Actions globais.
  • Lógica de UI Reutilizável: Ex: useModal, useFormValidation, useWindowDimensions.