An efficient and opinionated approach for work with SWR.
SWR-Toolkit offers an efficient and opinionated approach to working with SWR. This package provides a set of utilities and abstractions that simplify common patterns, enabling you to integrate SWR seamlessly into your application with minimal boilerplate.
Whether you're building a complex data-driven application or just need a straightforward solution for managing server state, SWR-Toolkit delivers a convenient, well-structured way to leverage SWR's powerful features. It helps you maintain clean, readable code while ensuring that your data fetching operations are performant and easy to manage.
- Hooks: Easily generate custom hooks for your API endpoints.
- SSR: Easily generate utility functions for data fetching in the server and SSR environments.
- Type Safety: Ensure that your API responses are type-safe with TypeScript.
#pnpm
pnpm add swr-toolkit
#yarn
yarn add swr-toolkit
#npm
npm add swr-toolkit
Here’s a step-by-step guide to usage:
Define your API endpoints and configure data fetching using the createApi
function. Create a file for your API
configuration (e.g., product-api.ts
).
// product-api.ts
import { createApi } from "swr-toolkit";
const productApi = createApi({
endpoints: (builder) => ({
getProducts: builder.query("/products", async (key) => {
const response = await fetch(key);
return (await response.json()) as Result<Product[]>;
}),
addProduct: builder.mutation(
"/products",
async (key, { arg }: { arg: AddProduct }) => {
const response = await fetch(key, {
method: "POST",
body: JSON.stringify(arg),
});
return (await response.json()) as Result<Product>;
},
),
}),
});
export default productApi;
Import the api instance that you created in product-api.ts
into your component.
import productApi from "./product-api";
export default function Products() {
const { data } = productApi.useGetProductsQuery();
const { trigger } = productApi.useAddProductMutation();
return (
<div>
{JSON.stringify(data)}
<button
onClick={() =>
trigger({
name: "Product name",
})
}
>
Add
</button>
</div>
);
}
For more detailed information on advanced usage, configuration options, and API features, please refer to the * *SWR-Toolkit Documentation**.