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?
- Reutilização: Lógica que se repete em vários componentes.
- Organização: Deixa o componente visual limpo e focado em renderizar a UI.
- 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
- Apenas no Topo: Não chame Hooks dentro de loops, condições ou funções aninhadas.
- Apenas em Funções React: Chame Hooks apenas em componentes funcionais ou em outros Custom Hooks.
- Prefixe com
use: Todo hook deve começar com a palavrause(ex:useUser,useForm).
Quando criar um Custom Hook?
- Sempre que houver lógica de estado complexa: Se o seu componente tem muitos
useStateouuseEffect, 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.