DEV Community

Cover image for Simplifying Data Fetching with Redux Toolkit's RTK Query
Nils Whitmont
Nils Whitmont

Posted on

Simplifying Data Fetching with Redux Toolkit's RTK Query

Introduction

Redux Toolkit (RTK) has become a popular choice for managing application state in React projects. But managing data fetching logic within Redux often involves writing boilerplate code. Enter RTK Query: an optional add-on for RTK that simplifies data fetching and caching.

What is RTK Query?

RTK Query is a powerful tool designed to streamline data fetching and caching in your React applications. It leverages the core functionalities of RTK, like createSlice and createAsyncThunk, to automate common data fetching tasks. This eliminates the need for manual code related to:

  • Making API requests
  • Handling response parsing
  • Caching data
  • Managing loading states

Benefits of Using RTK Query

  • Reduced Boilerplate: RTK Query automates much of the data fetching logic, freeing you to focus on component logic and UI.
  • Built-in Caching: Data is automatically cached, improving performance by reusing previously fetched data.
  • Automatic Request Deduplication: RTK Query ensures only one request is made for the same data, even if multiple components request it simultaneously.
  • React Hooks: RTK Query generates React hooks that encapsulate data fetching and provide convenient access to data and loading states within your components.
  • TypeScript Support: RTK Query is fully written in TypeScript, offering excellent type safety and developer experience.

Getting Started with RTK Query: A Code Example

Here's a basic example demonstrating how to use RTK Query to fetch a list of posts:

import { createSlice, configureStore } from '@reduxjs/toolkit';
import { fetchBaseQuery } from '@reduxjs/toolkit/query/react';

const initialState = { posts: [], loading: false };

const postsSlice = createSlice({
  name: 'posts',
  initialState,
  reducers: {},
  extraReducers: (builder) => {
    builder
      .addQuery('fetchPosts', async () => {
        // Simulate API call
        return await new Promise((resolve) => setTimeout(() => resolve([{ id: 1, title: 'Post 1' }], 1000)));
      })
  },
});

export const store = configureStore({
  reducer: {
    posts: postsSlice.reducer,
  },
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware().concat(fetchBaseQuery()),
});

// Accessing data and loading state in your component
import { useGetPostsQuery } from './postsSlice';

function PostsList() {
  const { data, isLoading } = useGetPostsQuery();

  return (
    <div>
      {isLoading ? (
        <p>Loading posts...</p>
      ) : (
        <ul>
          {data.map((post) => (
            <li key={post.id}>{post.title}</li>
          ))}
        </ul>
      )}
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

In this example, the fetchPosts query is defined within the postsSlice using builder.addQuery. RTK Query automatically generates a useGetPostsQuery hook that can be used in your components to access the fetched data and loading state.

Comparison with Tanstack React-Query

Both RTK Query and Tanstack React-Query are popular solutions for data fetching in React applications. Here's a brief comparison:

Feature RTK Query Tanstack React-Query
Integration Integrates seamlessly with Redux Toolkit Standalone library
Caching Built-in caching with customizable options Built-in caching with customizable options
Mutation Handling Requires separate mutation definitions Built-in mutation handling
TypeScript Support Fully written in TypeScript Fully written in TypeScript
Documentation & Community Extensive documentation and active community Extensive documentation and active community

Choosing Between RTK Query and React-Query

The choice between these libraries depends on your project setup and preferences. Here are some factors to consider:

  • Redux Usage: If you're already using Redux Toolkit, RTK Query offers a tightly integrated solution with minimal additional setup.
  • Mutation Handling: If your application requires frequent mutations, React-Query might be a better choice due to its built-in mutation handling.
  • Standalone Library Preference: If you prefer a standalone library for data fetching, React-Query is a strong option.

Conclusion

RTK Query is a powerful addition to the Redux Toolkit ecosystem, simplifying data fetching and caching for React applications. It offers a streamlined approach with built-in data caching and other advanced features.

Resources

Top comments (0)