DEV Community

Cover image for Polling in Vue.js
Pulkit Gupta
Pulkit Gupta

Posted on

10 1 1 1 1

Polling in Vue.js

Designing a composable in Vue.js to continuously poll data after the "x" interval.

What is Polling?

It is defined as the process when a client requests a particular piece of data at regular intervals (maybe every x seconds) and the server reverts with a usual response with the required data.

read more

Composable

Let's write a composable usePolling inside src/composables/usePolling.ts



import { ref, onMounted, onUnmounted } from "vue";

const usePolling = (method, timeInterval = 10000) => {
const interval = ref(null);
const callMethod = ref(method);
const isPolling = ref(false);

const clear = () => {
clearInterval(interval.value);
interval.value = null;
isPolling.value = false;
};

const fetchData = (poll = true) => {
callMethod.value();
if (poll) {
// start interval
interval.value = setInterval(() => {
callMethod.value();
}, timeInterval);
} else {
clear();
}
};

const start = () => {
// clear any existing polling calls
clear();
// set polling flag to true
isPolling.value = true;
// fetch data
fetchData();
};

onMounted(() => isPolling.value && fetchData());

onUnmounted(clear);

return {
start,
clear,
};
};

export default usePolling;

Enter fullscreen mode Exit fullscreen mode




Component:

Now, let's use this composable inside any component.



<script setup>
import { onMounted } from "vue";
import usePolling from "../composables/usePolling";

const apiCall = async () => {
console.log("api call");
// const response = await fetch("https://jsonplaceholder.typicode.com/todos/1");
// const data = await response.json();
// console.log(data);
};

const { start, clear } = usePolling(apiCall, 1000);

onMounted(start);
</script>

<template>
<h1>Hello world!</h1>
</template>

Enter fullscreen mode Exit fullscreen mode




Console output:

output

Top comments (0)

nextjs tutorial video

Youtube Tutorial Series 📺

So you built a Next.js app, but you need a clear view of the entire operation flow to be able to identify performance bottlenecks before you launch. But how do you get started? Get the essentials on tracing for Next.js from @nikolovlazar in this video series 👀

Watch the Youtube series

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay