Antd – React: ResizeObserver loop completed with undelivered notifications

If you’re working with Ant Design’s Table component in React and encountering the dreaded “ResizeObserver loop completed with undelivered notifications” warning, here’s a comprehensive guide to fix it.

Understanding the Problem

The ResizeObserver warning occurs when your table gets caught in an infinite loop of layout calculations. This typically happens when multiple features are competing to measure and resize the table simultaneously.

Common Problematic Configuration:

// Problematic configuration
<Table
    scroll={{ x: true }}
    scrollToFirstRowOnChange
    sticky
    tableLayout='fixed'
    // ... other props
/>

The Solution

Here’s how to fix the issue with a proper implementation:

1. Proper Table Configuration

// Fixed configuration
<Table
    scroll={{ x: 'max-content' }}
    sticky
    // ... other props
/>

2. Add ResizeObserver Management

const TableComponent = () => {
    const tableRef = useRef(null);

    useEffect(() => {
        const table = tableRef.current;
        if (table) {
            const resizeObserver = new ResizeObserver(
                debounce((entries) => {
                    // Handle resize if needed
                }, 100)
            );

            resizeObserver.observe(table);
            return () => resizeObserver.disconnect();
        }
    }, []);

    return (
        <div ref={tableRef} style={{ overflow: 'auto' }}>
            <Table {...tableProps} />
        </div>
    );
};

Key Changes Explained

  1. Changed scroll behavior:
    • Replaced scroll={{ x: true }} with scroll={{ x: 'max-content' }}
    • This tells the table to calculate width once instead of continuously
    • ‘max-content’ ensures the table takes the width it needs for all columns
  2. Removed problematic props:
    • Removed scrollToFirstRowOnChange – prevents unnecessary reflows
    • Removed tableLayout='fixed' – allows natural layout adjustment
  3. Added proper ResizeObserver cleanup:
    • Implemented cleanup in useEffect
    • Added debouncing to prevent excessive calculations
    • Used ref for stable table reference
  4. Added wrapper container:
    • Wrapped table in div with overflow: 'auto'
    • Helps manage horizontal scrolling efficiently
    • Moves scroll responsibility to wrapper instead of table

Why This Works

This solution works by:

  • Breaking the infinite resize loop
  • Properly cleaning up observers
  • Handling dynamic content more efficiently
  • Managing table layout calculations better
  • Providing smooth scrolling without constant recalculation

Note: The ResizeObserver warning isn’t just about the observer itself – it’s a symptom of the table being caught in a loop of layout calculations. By changing how the table handles its layout and scroll behavior, we break this loop while maintaining functionality.

Dependencies Required

{
    "dependencies": {
        "antd": "^5.x.x",
        "lodash": "^4.17.x"
    }
}

Conclusion

By implementing these changes, you can eliminate the ResizeObserver warning while maintaining all the functionality of your Ant Design table. The key is to manage layout calculations efficiently and prevent infinite resize loops.

Don’t miss these tips!

We don’t spam! Read our privacy policy for more info.