# React.Children.only expected to receive a single React element child

# The error explained

This error happens when a React component expects one child element but receives multiple elements or something that is not a valid React element. Many components use `React.Children.only()` internally even if you never call it directly in your code.

# Common mistake: Forgetting to map arrays

The most frequent cause is passing an array directly as children without mapping it first.

```typescript
// This causes the error
const ErrorExample = () => {
  const items = ["Item 1", "Item 2", "Item 3"];

  return (
    <Modal>
      {items} {/* Passing array directly */}
    </Modal>
  );
};
```

React treats the array as a single item, but it is not a valid React element. The component tries to use `React.Children.only()` on this array and crashes.

# How to fix array issues

Always map arrays to React elements and wrap them in a container:

```typescript
// Fixed version
const FixedExample = () => {
  const items = ["Item 1", "Item 2", "Item 3"];

  return (
    <Modal>
      <div>
        {items.map((item, index) => (
          <div key={index}>{item}</div>
        ))}
      </div>
    </Modal>
  );
};
```

# Other common causes

## Spreading array items

```javascript
// This causes the error
<SomeComponent>
  {[...items]} {/* Spreads multiple items directly */}
</SomeComponent>
```

## Incorrect conditional rendering

```typescript
// This causes the error
<ComponentThatExpectsOneChild>
  {condition &&
    <h1>Title</h1>
    <p>Content</p>
  }
</ComponentThatExpectsOneChild>
```

The correct approach is to wrap multiple elements:

```typescript
<ComponentThatExpectsOneChild>
  {condition && (
    <div>
      <h1>Title</h1>
      <p>Content</p>
    </div>
  )}
</ComponentThatExpectsOneChild>
```

# Components that often cause this error

These components often use `Children.only` internally:

* Modal components
    
* Portals
    
* Tooltips
    
* Context providers
    
* Animation wrappers
    

# Quick fixes checklist

When you see this error:

1. Check for arrays passed directly as children
    
2. Make sure you use `.map()` on any arrays
    
3. Wrap multiple elements in a single container
    
4. Check your conditional rendering syntax
    
5. Make sure all JSX expressions are properly wrapped with parentheses
    

These small mistakes are easy to make but can be fixed quickly once you know what to look for.
