𝗡ã𝗼 𝗖𝗼𝗻𝗳𝘂𝗻𝗱𝗮 𝗙𝗼𝗿𝗺𝗮𝘁𝗼 𝗱𝗲 𝗗𝗮𝗱𝗼𝘀 𝗰𝗼𝗺 𝗙𝗼𝗿𝗺𝗮𝘁𝗼 𝗱𝗲 𝗘𝘀𝘁𝗮𝗱𝗼

Ao construir um formulário React, você costuma agrupar tudo em um único e grande objeto de estado.

Você vê uma seção de Endereço na sua UI. Você cria um objeto de endereço no seu estado. Parece organizado. Parece limpo.

Isso é uma armadilha.

O problema não é o React. O problema é o formato do seu estado.

Formulários não são dados estáticos. Eles são sistemas interativos. Os usuários não atualizam formulários seção por seção. Eles os atualizam campo por campo.

Por que o estado aninhado prejudica seu projeto:

  • As atualizações tornam-se pesadas. Para alterar o nome de uma cidade, você deve recriar a cidade, o endereço e o objeto de formulário de nível superior para manter a imutabilidade.
  • A complexidade vaza. À medida que o formulário cresce, sua lógica de validação e renderização torna-se mais difícil de gerenciar.
  • O número de re-renders aumenta. Alterar um valor aninhado cria novas referências de objeto. Isso pode disparar atualizações desnecessárias em toda a sua árvore de componentes.
  • A carga cognitiva aumenta. Você para de pensar no usuário e começa a pensar em caminhos de objetos.

Formulários pequenos são tolerantes. Formulários de produtos não são.

Um formulário de produção precisa de validação, salvamento automático e lógica condicional. Se você construir isso sobre um objeto profundamente aninhado, cada nova funcionalidade parecerá custosa.

A solução é projetar o estado com base em como os dados mudam, não em como eles parecem.

Um formato de estado mais plano oferece estes benefícios:

  • Atualizações mais rápidas. Você mexe em menos código para alterar um único valor.
  • Depuração mais fácil. As atualizações permanecem locais e previsíveis.
  • Melhores limites de componentes. Você pode passar pequenos pedaços de dados em vez de objetos enormes.

Não achate tudo cegamente. Se os dados raramente mudam e sempre se movem juntos, o aninhamento está correto. Mas não aninhe as partes do seu formulário que mudam constantemente.

Faça a si mesmo estas perguntas antes de codificar:

  • Quais campos mudam com mais frequência?
  • Quais seções precisam de validação independente?
  • Quais atualizações devem permanecer isoladas do resto da UI?

Se atualizar um campo parecer mais difícil do que a própria alteração, a estrutura do seu estado é o problema.

Pare de modelar seu estado com base na sua UI. Comece a modelá-lo com base no comportamento do seu usuário.

Fonte: https://dev.to/hardik_kuwar_7caa4626bb16/the-mistake-is-assuming-data-shape-and-state-shape-should-always-match-5g0e