UNPKG

vue-recomputed-async

Version:

Vue.js extended computed composable with async, initial state & manual refresh support

56 lines (51 loc) 2.42 kB
# vue-recomputed-async [![NPM version](https://img.shields.io/npm/v/vue-recomputed-async.svg)](https://www.npmjs.com/package/vue-recomputed-async) Vue.js extended computed composable with async, initial state &amp; manual refresh support this library aims to provide better code integration by providing a single function that eliminate the need to create and call a fetch function, creating a sperate loading & data objects manually handling the fetch function errors, lazy evualation, providing an initial default state in case of in progress evaluation or failure ### Comparison with regular `computed()` & `vueuse` `computedAsync()`: |Feature|`computed()`|`computedAsync()`|`recomputedAsync()`| |-|-|-|-| |Dependency Tracking & Reactivity|✅|✅|✅| |Async Support|❌|✅|✅| |Initial State|❌|✅|✅| |Lazy Evaluation|❌|✅|✅| |Evaulation State|❌|✅|✅| |Manual Re-evaluation|❌|❌|✅| #### Use cases: - providing initial data state, while fetching data from API - ability to refresh the data that might be changed without being tied to any dependecy a normal computed would not be able to react to # Install ```bash npm i vue-recomputed-async ``` # Example Usage: ```vue <template> <div> <div v-if="peopleLoading">Loading People...</div> <div v-for="person in people" :key="person.name"> {{ person.name }} </div> <button @click="refreshPeople">Refresh</button> </div> </template> <script setup> import { recomputedAsync } from 'vue-recomputed-async'; import { getPeople } from './people-api' const { data: people, loading: peopleLoading, refresh: refreshPeople, } = recomputedAsync(async () => { return await getPeople() }, []) </script> ``` #### The `options` parameter: Since this package is an extension that uses [`computedAsync`](https://vueuse.org/core/computedasync/) composable from [`@vueuse/core`](https://vueuse.org/) package the hood, you can override the `options` #### Return object: |Field|Description| |-|-| |`refresh()`| a function that rexecute the evaluation callback function to refresh the computed value | |`data`| a reactive object that holds the the value returned the callback function, if the callback failed or still evaluation, it holds the initial value provided| |`loading`| returns `true` if the callback function is still evaluating