2 pontos por GN⁺ 2024-10-29 | 1 comentários | Compartilhar no WhatsApp

Baixa adoção da validação de formulários HTML

  • Os formulários HTML têm um mecanismo de validação poderoso, mas ele é pouco usado. Muita gente nem conhece bem esse recurso. Isso pode ser um defeito de design.

Atributos, métodos e propriedades

  • É possível adicionar o atributo required para impedir entradas vazias.
  • Há três maneiras de adicionar restrições à entrada:
    • usar valores específicos do atributo type: "email", "number", "url"
    • usar outros atributos de entrada, como "pattern" ou "maxlength"
    • usar o método DOM setCustomValidity: a forma mais poderosa, capaz de criar lógica de validação arbitrária e lidar com casos complexos.

As sutilezas da API imperativa

  • A API setCustomValidity é fornecida apenas como método, o que a torna inconveniente de usar.
  • Por exemplo, é possível implementar algo equivalente ao atributo required para impedir o envio do formulário quando o campo estiver vazio.
  • Na renderização inicial, é preciso definir o campo como inválido se ele estiver vazio.

O problema do boilerplate

  • A forma de validar valores iniciais é trabalhosa.
  • A lógica de validação fica duplicada entre o handler onChange e a etapa de renderização inicial.
  • A combinação useRef + useLayoutEffect + onChange é complexa.

O que está faltando

  • É necessário um atributo custom-validity.
  • Em frameworks declarativos, isso permitiria definir a validação de entrada de forma poderosa.

O poder da validação assíncrona

  • É possível lidar com casos em que um nome de usuário só deve ser válido se ainda não estiver em uso.
  • Isso exige uma chamada assíncrona ao servidor e um estado intermediário.

Implementação

  • A função verifyUsername é usada para verificar a unicidade do nome de usuário.
  • useQuery é usado para gerenciar o estado das requisições ao servidor.
  • O atributo customValidity é usado para descrever o fluxo de validação assíncrona.

Formulário de confirmação de senha

  • É implementado um formulário em que a senha digitada precisa ser repetida.
  • A validação verifica se os dois campos de entrada coincidem.

Conclusão

  • setCustomValidity pode atender a várias necessidades de validação.
  • Uma API poderosa fornece a verdadeira capacidade.
  • Há expectativa de que esse recurso seja adicionado à especificação HTML.

Resumo do GN⁺

  • A validação de formulários HTML é poderosa, mas pouco aproveitada. Isso pode acontecer por causa da complexidade da API.
  • O método setCustomValidity é uma ferramenta poderosa para lidar com lógica de validação complexa.
  • O texto apresenta formas de lidar com cenários complexos, como validação assíncrona.
  • Este artigo oferece informações úteis para ajudar desenvolvedores a aproveitarem melhor a validação de formulários HTML.

1 comentários

 
GN⁺ 2024-10-29
Comentários do Hacker News
  • Os navegadores ainda não permitem alterar o estilo das mensagens nativas de validação HTML, e Chrome e Firefox não seguem as diretrizes de UI da plataforma do sistema operacional, entrando em conflito com a estética do projeto

    • O Chrome anteriormente permitia alterar o estilo das mensagens de validação usando seletores de pseudo-elementos com prefixo de fornecedor, mas esse recurso foi removido
    • Há reclamações sobre o uso ineficiente de comboboxes HTML e de <select multiple>
  • Usar certos valores no atributo type (como "email", "number", "url") pode acionar o teclado ideal no mobile, melhorando bastante a experiência do usuário

  • As pessoas que escrevem as especificações estão desconectadas do uso real; serve para coisas simples, mas para formulários complexos é melhor fazer por conta própria

  • Há arrependimento por ter ignorado a simplicidade básica dos formulários, além de agradecimento por compartilhar a perspectiva de outra pessoa

  • Quando uma checkbox tem um rótulo, há um pedido para adicionar o atributo "for" ao rótulo, para que clicar nele ative/desative a checkbox

  • Exemplo simples fornecido sem usar React

  • A validação de formulários HTML é excelente, mas há um grande problema: ela não funciona no Firefox para Android

  • Muitos frameworks e bibliotecas oferecem recursos de validação estiláveis, então não vale a pena se dar ao trabalho

  • É preciso tomar cuidado para não exagerar no uso da validação

    • Houve uma experiência de precisar inspecionar o HTML por causa da exigência de "mínimo de 15 palavras" em um reembolso do Groupon
    • O padrão de validação não permitia nenhuma pontuação
  • Sites que usam type=password por engano em campos de entrada de 2FA confundem gerenciadores de senhas e navegadores