Case StudiesBlogAbout Us
Get proposal

How we implemented SWR in a project and why we loved it

Kamil Polok

Jun 09, 20216 min read

Next.jsReact

Table of Content

  • Why SWR?

  • What is SWR?

  • Why we loved SWR

  • How SWR works

  • Data mutation

  • SWR integrations

Why SWR?

Recently, we had the opportunity at SDH to develop a project using React with support from Redux/Toolkit. Thing is, though data was kept and fetched in the store, there was no caching mechanism implemented in the app.  And holding dozens of responses in the state is not my idea of a cool idea. Whatever the case, it soon got a little too easy to get lost in all those state slices, despite the use of Toolkit.  

What’s more, it had zero influence on the backend at that point. With those iceberg-sized chunks of data drifting about, some requests took an eternity to resolve.  And since the UI’s application consisted of long item lists with few CRUD operations,  it soon became clear that some form of cache would come in pretty handy just about then. So the choice fell to SWR - a library made by the developers of Vercel (also of Next.js fame).

What is SWR?

Ok, do you like reading definitions? I hope not, because this is going to be one of the shortest you've ever read. ‘SWR is a React Hooks library for remote data fetching’. That's it. Simple? Yes, but I will now show you that SWR is also very powerful. And in case you were wondering, SWR stands for stale-while-revalidate. Which already explains how it works. SWR returns data from cache (stale), sends a fetch request to get updated data (revalidate), then returns new data.  Like I said, simple. 


Why we loved SWR

It’s easy to recognise how using SWR eliminates problems described at the beginning of this article. Thanks to SWR, we:

  • Made the UI work perfectly (after initial data requests) thanks to caching data 
  • Removed nearly all slices holding API data and accompanying logic
  • Simplified the flow of revalidating data after making CRUD operations on data collections
  • Sped up the development of new API-dependent features

How did we actually implement this library for such magical results? 

How SWR works

After a short while of working with SWR, it proved itself to be rather simple and quite user-friendly. Fancy making an API request using SWR? Have this:

Screenshot 2023-07-21 at 16.32.34.png

The only catch is the fetcher. It’s just your custom function for fetching data. The application we worked on already had axios set up and running with its entire config (interceptors, headers, base URL, etc.), so we just wrapped our axios instance like this to get our own custom fetcher:

Screenshot 2023-07-21 at 16.32.42.png

Therefore, the entire hook could look as simple as this (let's skip error handling in this example):

Screenshot 2023-07-21 at 16.32.48.png

And... that's it! We’ve created a hook for fetching API data using all the SWR goodies. Whenever this hook is fired, it will return previously fetched data first (if present), and only then revalidate data and return new collection afterwards.

SWR out of the box comes with a handful of pre-configured parameters (all are listed here), which make working with it a piece of cake. A favorite option worth mentioning is dedupingInterval.

Typical use-case scenario: fetch data in one component, keep developing this component further, watch children grow out of control, only for a 4th level child to need the data. How you get this data into the child component without much effort whilst avoiding repeated requests is always a challenge. But fear not: simply reuse the SWR hook... The deduping interval will not allow the request to be made again within a specified amount of time (2 seconds by default). Fair enough.

"But if I call the endpoint, and it returns the same data as before, my component will still re-render". It will not: SWR implements deep comparison so re-render will only be triggered when data has actually changed. And the comparison function can, of course, be customized. 

Data mutation

But you might argue that GETting data is always easy - what about the mutating part? Surely this is more complicated. Well, not really, mutations don't have to be a nightmare, and I was surprised how easy it is to mutate data using SWR (previously having had some fun with Apollo). Here's a real-life example:

Screenshot 2023-07-21 at 16.32.54.png

In this example mutate is a function imported from SWR and /users is the key we gave it in useUsers hook (It doesn't have to be the endpoint URL - you can pass the key and URL separately).

Should you wish to cache and update a single entity (object) fetched from a bigger collection, simply mutate it by its key like so:

Screenshot 2023-07-21 at 16.33.01.png

Looks too simple? It is simple. Try it for yourself and you just may save considerable time writing extensive Redux logic and debugging your API calls.

SWR integrations

As you can see, implementing SWR is simple; with a few nice touches,  it doesn’t take much to advance the above examples to higher, more abstract levels. Obviously, SWR is not limited to this and there is a great number of options and integrations available:

graphQL integration

error handling with retry options

auto revalidation

pagination support (also for infinite loading)

data prefetching

and many more (documentation)

We found working with SWR supremely cool and will definitely consider using it for future projects. If you’d like to learn more about this awesome library, visit their official website with documentation, configs and examples here.

Happy coding!

Unicorn3.png

 

Published on June 09, 2021

Share


Kamil Polok

Front-end developer Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.

Digital Transformation Strategy for Siemens Finance

Cloud-based platform for Siemens Financial Services in Poland

See full Case Study
Ad image
How we implemented SWR in a project and why we loved it
Don't miss a beat - subscribe to our newsletter
I agree to receive marketing communication from Startup House. Click for the details

You may also like...

How to generate PDF from HTML in React / Node.js app
ReactNode.js

How to generate PDF from HTML in React / Node.js app

Generating PDFs from HTML can be a challenge, but with the right methods, you can achieve the desired results. Explore different solutions, from using CSS print rules to libraries like html2canvas, jsPDF, and Puppeteer. Understand the pros and cons of each approach to find the best solution for your project. Contact us at hello@start-up.house for more information and assistance. Good luck in your PDF generation endeavors!

Eugene Zolotarenko

May 20, 20216 min read

4 reasons to use Chakra UI in your next project
Chakra UIReact

4 reasons to use Chakra UI in your next project

Chakra UI is a simple, modular, and accessible component library for building React apps with speed. With its easy customization, dark mode support, responsive design capabilities, and focus on accessibility, Chakra UI stands out among other UI libraries, making it an excellent choice for React developers.

Mateusz Wójcik

Jan 19, 20214 min read

Recently added

Cross-functional team reviewing application development phases and deliverables on a planning wall
Application developmentProduct discoveryTime to Market

Application Development Solutions

Application development solutions cover the entire arc from strategic discovery to continuous scaling, and each phase has its own failure modes. This guide defines what modern solutions include, explains why discovery deserves real investment, and shows where custom engineering beats generic templates. It reviews agile sprint execution, industry-specific requirements and the engagement models that fit different growth stages. Security, compliance and time-to-market trade-offs are treated as engineering concerns rather than afterthoughts.

Alexander Stasiak

Aug 22, 20268 min read

Cloud engineers configuring containerised services and deployment pipelines on monitoring dashboards
Cloud computingCloud ComplianceDevOps

Application Development In Cloud Computing

Running an application in the cloud and building it for the cloud are very different engineering decisions. This guide covers cloud-native development properly: the delivery models, the container and orchestration stack, and the CI/CD pipelines that make continuous deployment safe. It walks the lifecycle step by step, addresses the challenges teams hit around cost control and vendor lock-in, and compares long-term economics against on-premise alternatives. Industry examples and forward-looking trends round out the picture.

Alexander Stasiak

Aug 21, 20268 min read

Software engineers conducting a code review and architecture assessment together
Software Engineering PracticesQuality AssuranceTechnology

Software Engineering Service

Engineering is a discipline of measurable, repeatable practice, and that is what separates a service from simple contract coding. This guide sets out the pillars of high-performance software engineering: strategic discovery, architectural design, rigorous testing and lifecycle maintenance. It compares cooperation models, explains how to choose a technology stack that suits your constraints, and walks a project from ideation to scale. A closing section looks at how AI is reshaping engineering practice itself.

Alexander Stasiak

Aug 20, 20267 min read

Senior programmers pair-programming on a complex backend service implementation
Computer programmingTech StackDelivery Models

Software Programming Services

Programming services are only as valuable as the architecture and process wrapped around them. This guide sets out the pillars of high-impact programming, how to choose a technology stack, and the delivery models that have replaced simple hourly billing. It follows the lifecycle of a programming project, covers infrastructure and platform engineering, and reviews vertical-specific expertise. Advanced trends, common outsourcing pitfalls and a method for calculating ROI complete the guide.

Alexander Stasiak

Aug 19, 20269 min read

Distributed engineering team collaborating on an outsourced application project across time zones
Software outsourcingEngagement ModelsCost Optimization

Application Outsourcing

Outsourcing applications is a governance problem as much as a sourcing one. This guide explains the strategic value of application outsourcing, compares the core engagement models, and covers stack selection and industry-specific requirements. It follows the outsourcing lifecycle from discovery through scaling, then examines the economics honestly, including where apparent savings turn into rework. Sections on engineering culture, platform engineering and the effect of AI on outsourcing close the picture.

Alexander Stasiak

Aug 18, 20269 min read

Enterprise architects planning a custom application and its integration landscape
EnterpriseCustom software developmentSystem Integration

Custom Enterprise Application Development Services

Once an organisation outgrows off-the-shelf software, the question becomes how to build resilience rather than features. This guide explains why enterprises commission custom applications, and what modern architectural standards demand around scalability, security and interoperability. It follows the roadmap from discovery to deployment, reviews industry-specific applications, and addresses the integration and change-management challenges that make enterprise projects difficult. Practical answers to common questions close the guide.

Alexander Stasiak

Aug 17, 20266 min read

Ready to centralize your know-how with AI?

Start a new chapter in knowledge management—where the AI Assistant becomes the central pillar of your digital support experience.

Book a free consultation

Work with a team trusted by top-tier companies.

Siemens logo
PwC logo
Toyota logo

We build what comes next.

Company

Startup Development House sp. z o.o.

Aleje Jerozolimskie 81

Warsaw, 02-001

VAT-ID: PL5213739631

KRS: 0000624654

REGON: 364787848

Contact Us

hello@startup-house.com

Our office: +48 789 011 336

New business: +48 798 874 852

Follow Us

Award
logologologologo

Copyright © 2026 Startup Development House sp. z o.o.

EU ProjectsPrivacy policyAI content policy