Challenge
Typing in a search box re-renders the whole page.
Agnotic approach
State moves down to the component that needs it, and long lists render only what is visible.
An existing React app gets slower and harder to change one dependency at a time. Agnotic Technologies audits your React codebase for rendering performance, Core Web Vitals, state management, accessibility and dependency health, then plans and delivers the upgrade, whether that is React 19 or leaving Create React App.
Trusted by global innovators
























ReactJS consulting
ReactJS consulting is an expert review and improvement plan for a React application that already exists. Agnotic Technologies audits rendering, bundle size, state and data fetching, accessibility, dependencies and tests, measures Core Web Vitals on your real pages, then upgrades or fixes the app with your team, including the move to React 19.
New frontend builds are covered by our frontend development services, and adding React developers to your team is our React developers service. This page is about an app you already run.
Most findings are not exotic: repeated renders from unstable props, one global store for everything, effects that fetch data on every keystroke and libraries nobody has updated since launch.
Audit checklist
The areas we review, the tool or metric for each, and the fix we most often recommend.
| Area | What we check | Tool or metric | Usual fix |
|---|---|---|---|
| Rendering | Components that re-render with no change in output | React DevTools Profiler | Stable props and keys, memoization only where the profiler shows a cost, state moved closer to where it is used |
| Bundle | JavaScript sent for each route | Bundle analyzer, network panel | Route-level code splitting and removal of unused or duplicate libraries |
| Loading | Largest Contentful Paint and layout shift on key pages | Field data and Lighthouse | Server rendering or prerendering for content pages, sized images, space reserved for late content |
| Interactivity | Slow responses to clicks and typing | Interaction to Next Paint | Long tasks broken up, and non-urgent updates deferred with transitions |
| State | Global stores that mix server data with local UI state | Code review | Server state in a data fetching library, local state kept local |
| Data fetching | Request waterfalls and effects that refetch too often | Network panel, code review | Parallel requests, caching and cancellation |
| Accessibility | Keyboard use, focus, labels, contrast and target size | axe checks plus manual screen reader tests | Semantic elements, labelled controls and visible focus that nothing covers |
| Dependencies | Outdated, unmaintained or duplicated packages and deprecated React APIs | Package audit, React 18.3 warnings | An upgrade plan ordered by risk |
| Tests | What is covered and how long the suite takes | Coverage report, CI timings | Component tests on key flows and end-to-end tests on the paths that earn money |
The audit report lists every finding with its evidence, its effect on users and the effort to fix it.
Failure points
The findings we see most often in audits, and the fix for each.
Challenge
Typing in a search box re-renders the whole page.
Agnotic approach
State moves down to the component that needs it, and long lists render only what is visible.
Challenge
The first load downloads code for every route.
Agnotic approach
Each route loads its own code on demand.
Challenge
A global store holds API responses, so data is stale or refetched by hand.
Agnotic approach
Server data moves to a data fetching library with caching, and the store keeps only UI state.
Challenge
Late images and banners push content down the page.
Agnotic approach
Space is reserved for every late element, so Cumulative Layout Shift stays low.
Challenge
A sticky header hides the focused element, or keyboard users get stuck in a dialog.
Agnotic approach
Focus is managed on open and close, and focused elements are never covered, as WCAG 2.2 asks.
Upgrade path
Five steps, each releasable on its own.
React 18.3 warns about everything React 19 removes, so we upgrade there first and collect the warnings.
ReactDOM.render becomes createRoot, string refs become callback or object refs, and propTypes move to TypeScript types or runtime validation.
The React team's codemods make the mechanical changes; engineers review every diff and fix what they miss.
Router, form, UI and testing libraries move to versions that support React 19.
The upgrade ships once the test suite, visual checks and a Core Web Vitals comparison with the old version pass.
Leaving Create React App
Create React App is deprecated for new apps. The right target depends on what your app needs from a server.
Who it is for
Teams with a React app in production that has become hard to change.
Apps on react-scripts that need a supported build tool or a framework.
Pages that miss LCP, INP or CLS targets for real users.
Products that must meet WCAG 2.2 AA for customers, contracts or law.
New owners who want to know what they have before they change it.
An audit first, so the redesign fixes structure as well as looks.
Standards and metrics
The references behind the audit checklist.
React release notes, web performance guidance and W3C standards, each linked to its primary source.
The React team published React 18.3, identical to 18.2 but with warnings for deprecated APIs and other changes needed for React 19, and recommends upgrading to 18.3 first.
Source: React 19 Upgrade Guide (react.dev)React 19 removes ReactDOM.render, which must be replaced with createRoot, removes string refs, and drops propTypes checks, which are now silently ignored.
Source: React 19 Upgrade Guide (react.dev)On 14 February 2025 the React team deprecated Create React App for new apps and encouraged existing apps to migrate to a framework or to a build tool such as Vite, Parcel or Rsbuild; Create React App continues in maintenance mode.
Source: react.dev blog: Sunsetting Create React AppGoogle's Web Vitals guidance sets good thresholds of 2.5 seconds or less for Largest Contentful Paint, 200 milliseconds or less for Interaction to Next Paint and 0.1 or less for Cumulative Layout Shift, measured at the 75th percentile of page loads.
Source: web.dev: Web VitalsWCAG 2.2 adds new Level AA success criteria, including 2.4.11 Focus Not Obscured (Minimum), 2.5.7 Dragging Movements, 2.5.8 Target Size (Minimum) and 3.3.8 Accessible Authentication (Minimum).
Source: W3C, Web Content Accessibility Guidelines 2.2Scope and cost
React work is priced after the scoping call, once we know where your app stands on each of these.
How many routes, components and shared packages the app has.
Moving from React 16 or 17 is a bigger step than moving from 18.
Leaving Create React App or a custom webpack setup adds migration work.
How many UI, form, state and routing libraries need major upgrades.
Whether tests already guard key flows, or some need writing before the upgrade.
How much remediation the WCAG 2.2 checks turn up.