Dynamic Forms Campos de Formulário Dinâmicos

Última atualização: 2026-11-03

Dynamic Forms Campos de Formulário Dinâmicos

Quando a quantidade de campos não é fixa, conduza a renderização a partir de um array mantido no estado: cada campo guarda um registro, adicionar e remover campos significa adicionar e remover itens do array, e atualizar um único campo significa percorrer o array e substituir a entrada com o id correspondente. Com keys estáveis, o React reutiliza corretamente o estado de entrada de cada linha. O array é a única fonte de verdade, então adicionar, editar e remover são três pequenas atualizações puras em vez de três pedaços de estado separados para reconciliar.

GrupoPadrões de Componentes
TipoPadrão

ℹ️ Informação O editor transpila JSX para JavaScript e renderiza a UI real na sandbox; os componentes são montados automaticamente — sem render manual.

📝 Sintaxe

const [rows, setRows] = useState([{ id: 1, name: '' }])

setRows([...rows, { id: nextId(), name: '' }])              // add a row
setRows(rows.filter(r => r.id !== id))                      // remove a row
setRows(rows.map(r => r.id === id ? { ...r, name: v } : r)) // edit one cell

Retorna:Sem valor de retorno; esta entrada descreve um padrão de codificação e não uma função.

▶ Exemplo

O exemplo roda direto: renderiza automaticamente ao expandir e edições valem na hora.

Saída:

Uma linha de entrada por padrão; clicar em "+ Add row" acrescenta uma linha e "Remove" deleta uma, cada linha mantém sua própria entrada, e a contagem na parte inferior se atualiza em tempo real.

💡 Pontos-chave

💡 Dica Use como key das linhas da lista um id de negócio em vez do índice do array; caso contrário, remover uma linha do meio desloca os índices e as entradas das outras linhas se embaralham.
ℹ️ Informação Mantenha as atualizações do array imutáveis: filter e map retornam novos arrays, e é assim que o React percebe a mudança e renderiza de novo.
⚠️ Aviso Lembre-se de usar type="button" nos botões de adicionar e remover linhas dentro de um formulário, caso contrário eles disparam o comportamento de envio padrão do formulário.
Mais casos em breve.

📚 Tutoriais Relacionados

❓ Perguntas Frequentes

P Depois de deletar uma linha, os valores das outras linhas se embaralham. Por quê?
R A key era o índice do array: depois da exclusão os índices mudam e o React entrega a entrada ao registro errado. Use um id de negócio estável como key.
P Cada linha deve ter o seu próprio useState?
R Não. A quantidade de linhas muda dinamicamente, então um único estado array com atualizações imutáveis por id é o mais simples — e a quantidade de hooks não pode mudar de qualquer forma.
P O que devo usar para gerar o id de uma nova linha?
R Date.now(), um contador crescente ou crypto.randomUUID() funcionam, desde que o id permaneça único e estável dentro da mesma lista.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%