React Query Outdated? The New Generation of Request Tool is Here

Eddie Kimpel - Oct 27 - - Dev Community

Attention-grabbing title: React Query Outdated? The New Generation of Request Tool is Here

Hey, everyone! Today, I want to share with you a topic that has got me really excited - the data fetching and preloading strategy of alovajs. You know what? This strategy has been a real lifesaver for me! It not only made my code more concise, but also greatly improved the user experience. To be honest, I can't help but sigh with admiration every time I use this feature. Today, I'll introduce you to the amazing tool alovajs and how it makes pagination list requests so simple.

What is alovajs?

alovajs is a next-generation request tool. Unlike libraries like react-query and swrjs, alovajs provides a complete request solution. It can not only generate interface call code, TypeScript types, and interface documentation, but also offers high-quality request strategies for various scenarios. These strategies include stateful data, specific events, and actions, making it smoother to use than other libraries.

Intrigued to learn more about alovajs? You can visit their official website: https://alova.js.org. I'm sure you'll be as impressed by its powerful features as I am.

Data Fetching and Preloading: Effortless and Efficient

Now, let's dive into how alovajs' data fetching and preloading strategy works. This feature has really made my development experience a joy!

Basic Setup

First, we need to define a query function:

const queryStudents = (page, pageSize) =>
  alovaInstance.Get('/students', {
    params: {
      page,
      pageSize
    }
  });
Enter fullscreen mode Exit fullscreen mode

Then, we can use the useFetcher hook in our component:

<template>
  <div v-if="loading">Fetching...</div>
  <!-- List view -->
</template>

<script setup>
  import { useFetcher } from 'alova/client';

  const getTodoList = currentPage => {
    return alovaInstance.Get('/todo/list', {
      cacheFor: 60000,
      params: {
        currentPage,
        pageSize: 10
      }
    });
  };

  const {
    loading,
    error,
    onSuccess,
    onError,
    onComplete,
    fetch
  } = useFetcher({
    updateState: false
  });

  const currentPage = ref(1);
  const { data } = useWatcher(() => getTodoList(currentPage.value), [currentPage], {
    immediate: true
  }).onSuccess(() => {
    // After the current page is successfully loaded, pass in the method instance of the next page to preload the data of the next page
    fetch(getTodoList(currentPage.value + 1));
  });
</script>
Enter fullscreen mode Exit fullscreen mode

This hook is so powerful! It not only provides basic features like loading status, list data, and page information, but also supports automatic management of pagination data and preloading. I feel my development efficiency has improved a lot with this tool.

Append Mode: Easy Infinite Scrolling

If you want to implement an infinite scrolling effect, you just need to enable the append mode:

useFetcher((page, pageSize) => queryStudents(page, pageSize), {
  append: true
});
Enter fullscreen mode Exit fullscreen mode

It's that simple! I still remember how tedious it was to implement this feature in the past. Now, it's a breeze.

Preloading: Smooth User Experience

alovajs also provides a preloading feature to enhance the user experience. This feature is so thoughtful! If you don't need this feature, you can disable it like this:

useFetcher((page, pageSize) => queryStudents(page, pageSize), {
  preloadPreviousPage: false,
  preloadNextPage: false
});
Enter fullscreen mode Exit fullscreen mode

Filtering: Smart and Efficient

For lists with filtering conditions, alovajs also provides a simple solution:

const studentName = ref('');
const clsName = ref('');
useFetcher((page, pageSize) => queryStudents(page, pageSize, studentName.value, clsName.value), {
  watchingStates: [studentName, clsName],
  debounce: 300
});
Enter fullscreen mode Exit fullscreen mode

This feature is so thoughtful! It automatically listens to changes in the filtering conditions and supports debouncing, making our code more concise and efficient. Every time I use this feature, I can't help but exclaim: "This is the development experience I've been dreaming of!"

Conclusion

In summary, alovajs' data fetching and preloading strategy has really impressed me. It not only simplifies our code, but also provides many thoughtful features, such as automatic management of pagination data, preloading, and filtering condition monitoring. This allows us to focus more on the business logic, rather than being bogged down by tedious data processing.

Using alovajs, I feel my development efficiency has improved a lot, and the code quality has also gotten better.

Fellow developers, how do you usually handle pagination list requests? Have you encountered any tricky problems? Feel free to share your experiences and thoughts in the comments. If you find this article helpful, don't forget to give it a like! Let's explore and progress together!

. . . . . . . . . .