Melhores Práticas de Formulários
Um resumo condensado das 25 melhores práticas mais importantes extraídas de cada página desta seção.
Busque em todas as páginas da documentação
Um resumo condensado das 25 melhores práticas mais importantes extraídas de cada página desta seção.
Controle cada TextInput: Emparelhe value com onChangeText - inputs não controlados lutam contra o preenchimento automático, a lógica de reset e as bibliotecas de validação em dispositivos móveis.
Combine keyboardType com o campo: email-address, phone-pad e numeric reduzem erros e agilizam a entrada - teclados errados frustram usuários em telas pequenas.
Conecte campos com returnKeyType: Use next + onSubmitEditing → .focus() no próximo ref - menos toques do que dispensar o teclado entre os campos.
Defina blurOnSubmit como false em telas com múltiplos campos: O último campo usa done - campos intermediários devem mover o foco, não dispensar o teclado prematuramente.
Dispense o teclado ao submeter: Chame Keyboard.dismiss() no manipulador de submissão para que os estados de sucesso e a navegação não fiquem obscurecidos.
Use keyboardShouldPersistTaps em formulários com scroll: Wrappers ScrollView/FlatList precisam de keyboardShouldPersistTaps="handled" para que os botões de submissão recebam toques enquanto o teclado está aberto.
Prefira react-hook-form em dispositivos móveis: Subscriptions superam grandes formulários useState - conecte inputs com Controller, não register estilo web.
Valide ao tocar, não a cada pressionamento de tecla: mode: "onTouched" mantém os erros inline calmos - validação gritante em onChange parece hostil em celulares.
Fonte única de verdade com Zod: Exporte z.infer<typeof Schema> - duplicar interfaces ao lado de schemas diverge na primeira mudança de API.
Converta strings de TextInput em schemas: z.coerce.number() ou transforms explícitos - TextInput sempre entrega strings mesmo para campos numéricos.
Coloque erros entre campos no caminho certo: O .refine() de confirmação de senha precisa de path: ["confirmPassword"] - erros raiz são invisíveis em dispositivos móveis.
Mapeie validação do servidor com setError: Erros de campo HTTP 422 devem cair no Controller correspondente - toasts genéricos sozinhos forçam os usuários a adivinhar o que falhou.
Instale KeyboardProvider na raiz: react-native-keyboard-controller requer o provider em _layout - sem ele, o scroll consciente e os helpers de barra de ferramentas não funcionam.
Prefira KeyboardAwareScrollView em vez de KAV ingênuo: O controlador de teclado rastreia inputs focados de forma mais confiável em iOS e Android de ponta a ponta (RN 0.86).
Defina softwareKeyboardLayoutMode do Android: app.config softwareKeyboardLayoutMode: "pan" combina com o keyboard-controller - redimensionamentos se comportam de forma diferente por OEM sem ele.
Use seletores nativos para datas quando a UX permitir: @react-native-community/datetimepicker respeita as convenções da plataforma - rodas personalizadas custam acessibilidade e manutenção.
Armazene valores de seletores como Date ou ISO no estado: Formate com Intl na borda de exibição - analisar strings de locale em manipuladores de submissão quebra com i18n.
Um objeto de formulário em todos os passos do assistente: FormProvider contém todos os campos - useState por passo perde o email quando o passo 2 é montado.
Valide apenas os campos do passo atual ao Avançar: trigger(STEP_FIELDS[step]) - a validação de schema completa no passo 1 falha porque o passo 3 está vazio.
Persista rascunhos do assistente: MMKV ou AsyncStorage salvam automaticamente e sobrevivem à morte do processo - confirme antes de Cancelar quando isDirty.
Intercepte o botão de voltar do hardware do Android em assistentes: BackHandler decrementa o índice do passo - caso contrário, os usuários saem do fluxo acidentalmente.
Rotule cada campo para acessibilidade: accessibilityLabel ou rótulos visíveis vinculados com accessibilityLabelledBy - o texto do placeholder não é um rótulo.
Anuncie erros do formulário: AccessibilityInfo.announceForAccessibility em caso de falha na submissão - leitores de tela podem não mover o foco para o primeiro erro automaticamente.
Foque o primeiro campo inválido após a submissão: setFocus no caminho do primeiro erro - usuários de dispositivos móveis não devem procurar por bordas vermelhas fora da tela.
Enfileire submissões offline explicitamente: UI otimista mais uma fila de retentativas persistida - falha silenciosa offline é pior do que um estado claro de "Salvo localmente".
useState é aceitável para uma única tela com três campos e sem erros do servidor.react-native-keyboard-controller para tratamento consistente de insets no RN 0.86.Versões da Stack: Esta página foi escrita para React 19.2.3, React Native 0.86.0 e Expo SDK 57 (
expo~57.0.4).
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026