Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
No desenvolvimento com React, é comum encontrarmos obstáculos que parecem simples, mas revelam uma compreensão mais profunda sobre o funcionamento do JSX e o tipo de retorno esperado pelos componentes. Um erro recorrente ao migrar ou criar componentes é o seguinte: um componente retorna um array de elementos JSX, mas o compilador reclama que esse retorno não é válido.
Ao montar uma tela com múltiplos componentes, muitos desenvolvedores usam arrays de elementos JSX para renderizar listas ou agrupamentos dinâmicos. Contudo, o React exige que cada componente que retorna múltiplos elementos seja encapsulado em um elemento pai ou utilize fragmentos. Caso contrário, ele interpreta que o retorno não está no formato esperado. A decisão fica mais saudável quando o time consegue medir o impacto depois.
No cenário típico, uma função de componente que retorna um array de elementos JSX sem fragmentos ou elemento pai gerará um erro de tipo: o React espera um JSX.Element, mas recebe um Element[]. Isso acontece porque, apesar de JSX aceitar arrays como uma forma válida de retornar múltiplos elementos, o tipo de retorno declarado no TypeScript precisa refletir isso. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
A causa mais comum desse problema é a definição de retorno do componente. Um componente definido como JSX.Element não aceita um array de elementos. Para esse caso, o correto é usar JSX.Element | JSX.Element[] na assinatura da função.
Por exemplo, uma função que retorna um array de <div>s deve ser declarada como:
function Lista(): JSX.Element | JSX.Element[] {
const itens = [1, 2, 3]. return itens.map((item) => <div key={item}>Item {item}</div>). }
Se a assinatura estiver como JSX.Element, o TypeScript reclamará, pois o retorno é um array. Essa discrepância é o que leva ao erro. Além disso, o uso de fragmentos (<>...</>) resolve o problema ao envolver múltiplos elementos, garantindo um único elemento pai. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
return <>{listItems}</>.JSX.Element | JSX.Element[].<div> ou um fragmento.No componente que exibe os itens, o retorno deve estar assim: Sem esse critério, a solução pode parecer simples no começo e cara no suporte.
function Todos(): JSX.Element | JSX.Element[] {
const todos = useSelector((state: RootState) => state.todos). if (todos.length === 0) {
return <div>Sem tarefas</div>. }
return (
<>
{todos.map((todo) => (
<div key={todo.id}>{todo.text}</div>
))}
</>
). } O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Dessa forma, o React entende que o componente pode retornar um único elemento ou uma lista de elementos encapsulados por um fragmento. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
A chave aqui é entender que a tipagem do retorno do componente deve refletir a possibilidade de múltiplos elementos. Além disso, usar fragmentos ao retornar listas de elementos é uma prática que evita erros de tipos e garante uma renderização limpa e coerente. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
Se você já tentou colocar o todos.map() dentro de fragmentos e ainda enfrenta esse erro, confira a assinatura do seu componente e a forma como está retornando o JSX. Ajustar a tipagem e envolver a lista com fragmentos costuma resolver o problema, garantindo uma manutenção mais tranquila e um código mais robusto. A decisão fica mais saudável quando o time consegue medir o impacto depois. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar.
Carregando comentários...