ReactJS Consulting

    ReactJS consulting for audits and upgrades

    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.

    Codebase auditReact 19 upgradeOff Create React AppCore Web Vitals and WCAG 2.2

    Trusted by global innovators

    Benchmark
    Chibasco
    Fundency
    Lantimer
    Lauren
    Lera
    One Minute
    Pento Pix
    TAP
    Xtrium
    Healthevolve
    Benchmark
    Chibasco
    Fundency
    Lantimer
    Lauren
    Lera
    One Minute
    Pento Pix
    TAP
    Xtrium
    Healthevolve
    Benchmark
    Chibasco
    Fundency
    Lantimer
    Lauren
    Lera
    One Minute
    Pento Pix
    TAP
    Xtrium
    Healthevolve
    Benchmark
    Chibasco
    Fundency
    Lantimer
    Lauren
    Lera
    One Minute
    Pento Pix
    TAP
    Xtrium
    Healthevolve

    ReactJS consulting

    What does ReactJS consulting involve?

    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

    What does a React app audit check?

    The areas we review, the tool or metric for each, and the fix we most often recommend.

    AreaWhat we checkTool or metricUsual fix
    RenderingComponents that re-render with no change in outputReact DevTools ProfilerStable props and keys, memoization only where the profiler shows a cost, state moved closer to where it is used
    BundleJavaScript sent for each routeBundle analyzer, network panelRoute-level code splitting and removal of unused or duplicate libraries
    LoadingLargest Contentful Paint and layout shift on key pagesField data and LighthouseServer rendering or prerendering for content pages, sized images, space reserved for late content
    InteractivitySlow responses to clicks and typingInteraction to Next PaintLong tasks broken up, and non-urgent updates deferred with transitions
    StateGlobal stores that mix server data with local UI stateCode reviewServer state in a data fetching library, local state kept local
    Data fetchingRequest waterfalls and effects that refetch too oftenNetwork panel, code reviewParallel requests, caching and cancellation
    AccessibilityKeyboard use, focus, labels, contrast and target sizeaxe checks plus manual screen reader testsSemantic elements, labelled controls and visible focus that nothing covers
    DependenciesOutdated, unmaintained or duplicated packages and deprecated React APIsPackage audit, React 18.3 warningsAn upgrade plan ordered by risk
    TestsWhat is covered and how long the suite takesCoverage report, CI timingsComponent 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

    What slows down an existing React app?

    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

    How do we upgrade a React app to React 19?

    Five steps, each releasable on its own.

    1. Move to React 18.3

      React 18.3 warns about everything React 19 removes, so we upgrade there first and collect the warnings.

    2. Replace removed APIs

      ReactDOM.render becomes createRoot, string refs become callback or object refs, and propTypes move to TypeScript types or runtime validation.

    3. Run the codemods, then review

      The React team's codemods make the mechanical changes; engineers review every diff and fix what they miss.

    4. Update libraries

      Router, form, UI and testing libraries move to versions that support React 19.

    5. Release behind checks

      The upgrade ships once the test suite, visual checks and a Core Web Vitals comparison with the old version pass.

    Leaving Create React App

    Where should a Create React App project move?

    Create React App is deprecated for new apps. The right target depends on what your app needs from a server.

    A framework

    • Pages that need server rendering or static generation for speed and search
    • Routing and data loading handled by the framework
    • Next.js or React Router in framework mode are common choices

    A build tool for a single-page app

    • Apps behind a login where search indexing does not matter
    • Vite, Parcel or Rsbuild in place of react-scripts
    • Environment variables, dev proxies and test setup moved across

    What moves in either case

    • Webpack-specific imports and loaders
    • Jest configuration, or a move to Vitest
    • Absolute imports and path aliases
    • CI scripts and the deploy step

    Who it is for

    Who asks for ReactJS consulting?

    Teams with a React app in production that has become hard to change.

    Teams stuck on Create React App

    Apps on react-scripts that need a supported build tool or a framework.

    Products with poor Core Web Vitals

    Pages that miss LCP, INP or CLS targets for real users.

    Apps facing accessibility requirements

    Products that must meet WCAG 2.2 AA for customers, contracts or law.

    Teams that inherited a React codebase

    New owners who want to know what they have before they change it.

    Companies planning a redesign

    An audit first, so the redesign fixes structure as well as looks.

    Standards and metrics

    Which standards and metrics do we audit against?

    The references behind the audit checklist.

    WCAG 2.2 AACore Web VitalsReact 19WAI-ARIATypeScript
    Facts and sources

    Facts behind React audits and upgrades

    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 App
    • Google'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 Vitals
    • WCAG 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.2

    Scope and cost

    What drives the size of a React engagement?

    React work is priced after the scoping call, once we know where your app stands on each of these.

    Codebase size

    How many routes, components and shared packages the app has.

    Version gap

    Moving from React 16 or 17 is a bigger step than moving from 18.

    Build tool

    Leaving Create React App or a custom webpack setup adds migration work.

    Library estate

    How many UI, form, state and routing libraries need major upgrades.

    Test coverage

    Whether tests already guard key flows, or some need writing before the upgrade.

    Accessibility findings

    How much remediation the WCAG 2.2 checks turn up.

    Frequently Asked Questions

    We do not publish prices. The audit is fixed work sized by the app; upgrade and fix work depends on the version gap, the build tool, the library estate and test coverage. The audit quote and an outline of the follow-on work arrive in writing after the scoping call.