Back

certificates.dev

Breaking Down State of React 2025 Results - Certificates.dev

2/16/2026Updated 3/27/2026
https://certificates.dev/blog/breaking-down-state-of-react-2025-results

**`useEffect`** remains the top complaint in the hooks category at 37%, followed by dependency array issues (21%). The reactivity model continues to frustrate developers, especially when dealing with stale closures and effect cleanup. … Server Components and Server Functions are more complicated. While they're slowly growing in popularity, they're also the third and fourth most disliked features respectively. For more context, see React Frameworks and Server-Side Features: Beyond Client-Side Rendering. … 1. **`<Profiler>`** - 57% 2. **`<ViewTransition>`** - 41% 3. **`<Activity>`** - 41% 4. **React cache** - 41% 5. **`useEffectEvent`** - 40% 6. **`useDeferredValue`** - 39% … ### Pain Points Worth Noting Beyond hooks, developers called out several recurring frustrations: - **`forwardRef`**: The bane of React developers for years. Thankfully, it's deprecated in React 19 with `ref` as a prop. - **`act`** testing issues: Wrapping updates in `act()` for tests remains confusing, especially with async operations. - **Memoization complexity**: Knowing when to reach for `useMemo`, `useCallback`, and `React.memo` adds mental overhead. - **`<StrictMode>`** double-rendering confusion: Developers still get tripped up by effects running twice in development. Memoization is a recurring pain point. Knowing when to use `useMemo`, `useCallback`, and `React.memo` adds mental overhead. React Compiler should hopefully solve this by handling memoization at build time. Learn more in React Compiler: No More useMemo and useCallback. … The top pain points are excessive complexity (20%) and boilerplate (15%). … - **Create React App**: Most developers have used it, but negative sentiment reflects its sunset in February. ... - **Next.js**: The dominant full-stack React framework, though some cite lock-in fears and complexity.

Related Pain Points10

React/Next.js serialization vulnerabilities expose TypeScript runtime risks

9

Critical security vulnerabilities like React2Shell (CVE-2025-55182, CVSS 10.0) in Next.js RSC serialization revealed that full-stack JavaScript and TypeScript lack secure serialization models. These runtime CVEs forced developers to reassess security assumptions in TypeScript/React stacks.

securityTypeScriptReactNext.js

Create React App Sunset and Migration Pain

7

Create React App, used by most React developers, was sunset in February 2025, forcing migrations to alternative tooling. This creates significant disruption and requires developers to rebuild their setup and dependency chains, generating migration headaches.

migrationCreate React App

useEffect Hook Complexity and Dependency Array Management

7

useEffect is used by 98% of developers but has the lowest satisfaction ratio of any React hook. The top complaint (37%) centers on finicky reactivity, stale closures, and effect cleanup issues. Dependency array problems account for 21% of complaints, a 23.5% year-over-year increase.

dxReactuseEffect

Memoization Complexity and Mental Overhead

6

Knowing when to use useMemo, useCallback, and React.memo adds significant mental overhead for developers. This complexity stems from React's component-based reactivity model requiring the entire component function to re-run on every update, forcing developers to manually optimize with memoization.

dxReactuseMemouseCallback+1

Excessive Boilerplate and Complexity in React Codebases

6

React codebases suffer from excessive complexity (20% of pain points) and boilerplate (15%). The accumulation of hooks, rules, patterns, and workarounds creates codebases that are hard to maintain and riddled with hacks, making even simple code reviews feel like navigating bureaucratic mazes.

dxReact

Framework perceived as overengineered for complexity added

5

Many developers perceive Next.js as overengineered, adding unnecessary complexity without proportional benefits. The framework's architectural decisions and accumulated features create bloat that doesn't serve most use cases.

architectureNext.js

React Testing Complexity with act() Function

5

Wrapping updates in act() for tests remains confusing and error-prone, especially with asynchronous operations. This adds friction to the testing workflow and requires additional cognitive load.

testingReactact

StrictMode Double-Rendering Confusion

4

Developers continue to get tripped up by effects running twice in development mode due to StrictMode. This behavior confuses developers and stems from React's fundamental architecture requiring entire component functions to re-run on updates.

dxReactStrictMode

Abundance of New Unfamiliar React APIs (Profiler, ViewTransition, cache, etc.)

4

React 19 introduced numerous new APIs with low familiarity among developers: Profiler (57% unfamiliar), ViewTransition (41%), Activity (41%), cache (41%), useEffectEvent (40%), useDeferredValue (39%). This creates knowledge gaps and increases the learning curve for developers trying to stay current.

docsReactProfilerViewTransition+3

Deprecated forwardRef Pattern

3

The forwardRef pattern has been a longstanding pain point for React developers for years. While React 19 deprecates forwardRef in favor of ref as a prop, legacy codebases and older patterns still create friction.

migrationReactforwardRef