PickMe Ashan Perera Mar 13, 2026

Why I Stripped My UI Library to Build a High-Performance Component

M2 Related OWASP risk: Inadequate Supply Chain Security Learn more →

Article Summary

Ashan Perera from PickMe Engineering hit a performance wall that every React developer dreads: typing a single character into a table cell caused a multi-second freeze. His solution? Strip out the entire UI library.

Building an editable table for 1,000+ rows with real-time cross-row validation seemed straightforward using Ant Design and React Hook Form. But at 100 rows per page, the app became unusable. What followed was a deep dive into React's reconciliation bottleneck and a controversial architectural decision.

Key Takeaways

Critical Insight

By replacing declarative React patterns with imperative JavaScript and removing the UI library entirely, the team achieved instant performance for a 1,000+ row editable table with real-time validation.

The final solution was faster than Web Workers and beat a legacy Angular app, but the author admits he might be completely wrong about the approach.

About This Article

Problem

Ashan Perera's team had to validate data across 1,000+ rows of CSV files in real time. The challenge was handling conflicts between values in different rows, like Row 1 and Row 999, and showing errors at the cell level immediately.

Solution

Instead of using React's useState and useEffect, the team switched to useRefs with plain JavaScript objects. This let them skip React's state management entirely and use a single Reducer function to handle all validation logic.

Impact

The final version used imperative DOM updates and a custom TypeScript table built without Ant Design. It was faster on the main thread than both the Web Worker approach and the legacy Angular application.