DEV Community

Cover image for Concurrent Rendering in React: How React’s Concurrent Rendering Makes Everything Smoother
Mukhil Padmanabhan
Mukhil Padmanabhan

Posted on

Concurrent Rendering in React: How React’s Concurrent Rendering Makes Everything Smoother

Concurrent rendering, a powerful feature that can make apps feel smoother and more responsive. It’s one of those features that immediately feels like a game-changer, so I wanted to pass on what I’ve learnt! Now user expectations for fast, responsive apps are at an all-time high. It’s important to know about concurrent rendering in order to build high-performance experiences.
Imagine you’re browsing an app, typing in a search box, and watching results pop up instantly. You click to expand a menu, and it opens without delay. Everything feels smooth and snappy. That’s the magic of concurrent rendering in React!

In this post, we’ll break down what concurrent rendering actually means, why it’s more essential than ever for modern web applications.


What is Concurrent Rendering?

To help understand concurrent rendering, let’s begin with a simple analogy. Picture a kitchen in a busy restaurant that has many dishes it needs to prepare at once. Some of these dishes are short order (like an appetizer) and should be served immediately. Others are longer order dishes (like an 8 course meal for one person) and will take more time to serve. Instead of doing all the tasks involved in preparing one dish before moving onto the next dish, the chef looks at every dish on its merits and try to serve as much of each as possible before serving any.

Concurrent rendering in React is similar. Instead of processing each update one by one (possibly blocking the process), React can process multiple updates at the same time, pausing updates if they are less important (e.g. the user clicked button) or running them in the background (e.g data fetching). This allows your application to stay responsive and fast even when there’s a lot going on!


Why Concurrent Rendering is So Important in 2024

In the digital world of today, users have learned to expect app speeds. When they type, click or scroll, they want an immediate reaction. Concurrent rendering makes this possible and here's why it's such a big deal:

  • Instant Feedback for Users: When a user interacts with an app, they want to see something happen immediately. React can now prioritize these interactions and make your app seem more responsive.
  • Performance across devices: Whether the user has a high-powered desktop or a low-end phone, React will be able to fit in and make apps feel smooth on more devices.
  • Seamless Loading: While data is being loaded in the background, concurrent rendering stops the app from “freezing” or slowing down making it possible for users to keep interacting with the app.

How Concurrent Rendering Works in React

In order to enable concurrent rendering, React has introduced a couple of tools, useTransition and Suspense, that let developers decide which updates are more important. Let’s try to understand how these work.

useTransition: Prioritizing Important Updates

Think of useTransition as the express lane at a grocery store. It’s for “urgent” items that need to go through fast. With useTransition, you can tell React which updates to prioritize (e.g., user clicks or typing), while less urgent tasks (e.g., background data updates) wait their turn.

A Search App
Imagine you’re building a search app. Every time the user types in the search box, the app filters through a large dataset to display relevant results. Without useTransition, each keystroke might slow down the app. But with useTransition, React can prioritize the typing experience, ensuring it’s smooth, while the search results load in the background.

Image description

With useTransition, as the user types, they won’t experience delays or lag, and they’ll see a “Loading results…” message while the app processes the data.


Suspense: Gracefully Handling Data Loading

Suspense is a new tool in the React ecosystem, which helps you to manage your loading states within your app instead of just showing your users a freezing app and blocking UI until everything is ready.

Example: A User Profile Page

Imagine you’re building a user profile page which is composed of data from different sources—profile info, recent activity and settings. With Suspense you can display a loading spinner until all the data is ready so that user never sees an empty content.

Image description

Here, Suspense shows “Loading profile…” until UserData is ready, keeping the experience smooth and uninterrupted.


Applications of Concurrent Rendering

Here are a few examples of how concurrent rendering is having an impact in practical applications:

E-commerce Websites: Online stores usually have lots of product list and filters. User using the site can navigate, filter and scroll smoothly without waiting for the site to load the product details in background.

Social Media Feeds: Social media sites keep on loading new content. User scrolling, like or commenting should not wait for new posts to be loaded by site in background.

Streaming Platforms: On platforms like YouTube or Netflix smooth scrubbing during playback is possible since concurrent rendering prioritises playback controls and UI interaction over background tasks.


How to Begin Using Concurrent Rendering in Your React Projects

Once you are all set and ready to start trying concurrent rendering with your React projects, here’s what you need to begin with:

Experiment with useTransition: Try using useTransition for things like search filter, sort or list updates, it’ll help you ensure user interactions are smooth even on high data fetching.

Add Suspense for data loading : Use Suspense for components that make api/database calls to load data, it’ll help you manage loading state gracefully and will avoid UI jankyness.

Combine with Server-Side Rendering: If you’re using Next.js, get the benefit of concurrent rendering in server-side rendering and achieve faster first page load which appears to be more responsive.


Conclusion:

Users have higher expectations for web applications than ever. No matter how complex or data heavy, applications should feel fast, responsive, and intuitive. This is what concurrent rendering opens up for us in React by letting it handle updates smarter — make important interactions high priority and background tasks can no longer block your main thread.

Whether you’re creating a dynamic e-commerce site, an interactive search experience, or a social media feed, concurrent rendering allows you to build a better user interface. It’s not just about fast apps; it’s about apps that feel magic to use. If you haven't had the opportunity to try concurrent rendering yet, there's never been a better time to start and finally make your app faster!

So let’s do this! Begin playing with concurrent rendering today and watch how it starts shaping your React projects! Happy coding!

Top comments (0)