UNPKG

@aspida/swrv

Version:
160 lines (123 loc) 3.9 kB
# @aspida/swrv <br /> <img src="https://aspida.github.io/aspida/logos/png/logo.png" alt="aspida" title="aspida" /> <div align="center"> <a href="https://www.npmjs.com/package/@aspida/swrv"> <img src="https://img.shields.io/npm/v/@aspida/swrv" alt="npm version" /> </a> <a href="https://www.npmjs.com/package/@aspida/swrv"> <img src="https://img.shields.io/npm/dm/@aspida/swrv" alt="npm download" /> </a> </div> <br /> <div align="center"><a href="https://github.com/Kong/swrv">SWRV (Vue Composition API)</a> wrapper for <a href="https://github.com/aspida/aspida/">aspida</a>.</div> <br /> <br /> ## Getting Started ### Installation - Using [npm](https://www.npmjs.com/): ```sh $ npm install aspida @aspida/swrv @aspida/axios swrv axios # $ npm install aspida @aspida/swrv @aspida/fetch swrv # $ npm install aspida @aspida/swrv @aspida/node-fetch swrv node-fetch ``` - Using [Yarn](https://yarnpkg.com/): ```sh $ yarn add aspida @aspida/swrv @aspida/axios swrv axios # $ yarn add aspida @aspida/swrv @aspida/fetch swrv # $ yarn add aspida @aspida/swrv @aspida/node-fetch swrv node-fetch ``` ### Make HTTP request from application `src/index.vue` ```vue <template> <div> <div v-if="error">failed to load</div> <div v-if="!data">loading...</div> <div v-else>hello {{ data.name }}</div> </div> </template> <script lang="ts"> import { defineComponent } from "@vue/composition-api"; import useAspidaSWRV from "@aspida/swrv"; import aspida from "@aspida/axios"; // "@aspida/fetch", "@aspida/node-fetch" import api from "../api/$api"; const client = api(aspida()); export default defineComponent({ name: "Profile", setup() { const { data, error } = useAspidaSWRV(client.user._userId(123), { query: { name: "mario" } }); return { data, error }; }, }); </script> ``` ### Get response body/status/headers `src/index.vue` ```vue <template> <div> <div v-if="error">failed to load</div> <div v-if="!data">loading...</div> <template v-else> <div>Status: {{ data.status }}</div> <div>Headers: {{ JSON.stringify(data.headers) }}</div> <div>Name: {{ data.body.name }}</div> </template> </div> </template> <script lang="ts"> import { defineComponent } from "@vue/composition-api"; import useAspidaSWRV from "@aspida/swrv"; import aspida from "@aspida/axios"; // "@aspida/fetch", "@aspida/node-fetch" import api from "../api/$api"; const client = api(aspida()); export default defineComponent({ name: "Profile", setup() { const { data, error } = useAspidaSWRV(client.user._userId(123), "get", { query: { name: "mario" }, }); return { data, error }; }, }); </script> ``` `useAspidaSWRV(client.user._userId(123), { query })` is an alias of `useAspidaSWRV(client.user._userId(123), "$get", { query })` ### Use with SWRV options `src/index.vue` ```vue <template> <div> <div v-if="error">failed to load</div> <div v-if="!data">loading...</div> <div v-else>hello {{ data.name }}</div> </div> </template> <script lang="ts"> import { defineComponent } from "@vue/composition-api"; import useAspidaSWRV from "@aspida/swrv"; import aspida from "@aspida/axios"; // "@aspida/fetch", "@aspida/node-fetch" import api from "../api/$api"; const client = api(aspida()); export default defineComponent({ name: "Profile", setup() { const { data, error } = useAspidaSWRV(client.user._userId(123), { query: { name: "mario" }, revalidateDebounce: 0, }); return { data, error }; }, }); </script> ``` ### Dependent Fetching ```ts const { data: user } = useAspidaSWRV(client.user); const { data } = useAspidaSWRV(() => user.value && client.articles, { query: { userId: user?.id ?? 0 }, }); ``` ## License @aspida/swrv is licensed under a [MIT License](https://github.com/aspida/aspida/blob/master/packages/aspida-swrv/LICENSE).