Formik com Hooks - Simplicidade na integração — useFormik()! Parte 1

Yuri Toledo
React Brasil
4 min readMay 9, 2019

--

⚠️ Lembrando que esse é um artigo da versão BETA do Formik e está defasado! Verifique aqui, o novo artigo que substitui esse que está lendo! ⚠️

Veja a primeira série de posts sobre o Formik, começando do básico!

Lá e de volta outra vez!

Depois de ler o anúncio que o Fomik seria reescrito com Hooks, fiquei imaginando como seria a API de um possível useFormik e acompanhei dia após dia por essa tal implementação … e demorou, mas aqui está!

Eu sempre usei a implementação HoC withFormik(), por precisar usar os métodos do Formik — injetados via props — no lifecycle do componente, ou em outros métodos, em formulários não tão triviais. E querendo ou não, sempre ficou meio feio essa implementação de deixar parte do comportamento do formulário dentro do withFormik e outra parte no componente.
Já tentei usar o <Formik> mas sempre achei pior 😑, essa abordagem de colocar muita lógica dentro do return do componente. Todavia, tudo isso é passado — ou quase tudo, afinal ainda não foi lançado oficialmente — mas, vamos fazer uma implementação básica, para ver como ficou 😬

Como não é uma versão final ainda, para adicionar ele ao seu projeto, é necessário colocar a versão:

yarn add formik@2.0

Depois, vamos importar o useFormik e já criar um formulário básico, utilizando o hook:

Se você der um ctrl space (no vscode) ali nas chaves dentro do useFormik — vai encontrar alguns métodos que usamos no corpo do Formik e no withFormik, como initialValues, onSubmit, validate(para validações manuais) validationSchema (para validar com yup), entre outros.

Para começar, vamos invocar os primordiais: initialValues, validate e o onSubmit:

Bom, até aqui, nada muito diferente do já faziamos, né?
Se você der um ctrl space ali dentro do destructuring da linha 1, vai ver todos os métodos que o formik nos provê, como:

  • errors
  • handleChange
  • handleSubmit
  • isValid
  • resetForm
  • setValues
  • etc.

Dentre eles, vamos nos familiarizar nesse artigo, com o getFieldProps. Ele (e somente ele) vai manipular os dados dos inputs para nós.

Vamos utiliza-lo da seguinte forma:

Ele espera 2 parâmetros, o primeiro é um nome declarado no initialValues — no nosso caso, name, contact.email, etc — e o segundo, o tipo de input que ele será — text, number, checkbox, radio.
Seguindo a syntax dos hooks, ele retorna 2 valores, onde podemos separa-los com o destructuring. O primeiro (email) contêm name, value, onBlur e onChange, que são exatamente os itens que precisamos para vincular um input ao formik! O segundo, são seus metadados, que são initialValue, touched, error e value .

Usando spread operator, podemos fazer assim:

Não é demais?! 🎉

Para validar, podemos usar os metadados:

E pronto, formulário manipulado e validado de forma simples e eficiente!

Finalizando assim:

Lembrando que tudo isso ainda não é estável, então, nada de produção!

E aqui fica um link, para você brincar e ver como fica, na prática!

https://codesandbox.io/s/formik-hooks-2r7g5

--

--

Yuri Toledo
React Brasil

Moved to improving the relationship among humans and machines.