Requerimientos
- React
Configuracion del Proyecto
npm create vite react-query-crud
- Framework: React
- Language: Javascript
cd react-query-crud
npm i
npm run dev
Luego instalaremos bibliotecas como:
npm i @tanstack/react-query
# or
pnpm add @tanstack/react-query
# or
yarn add @tanstack/react-query
Luego modifica el index.js:
import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App";
import "./index.css";
import { QueryClientProvider, QueryClient } from "@tanstack/react-query";
const queryClient = new QueryClient();
ReactDOM.createRoot(document.getElementById("root")).render(
<React.StrictMode>
<QueryClientProvider client={queryClient}>
<App />
</QueryClientProvider>
</React.StrictMode>
);
Añadiendo dev tools
npm i @tanstack/react-query-devtools
# or
pnpm add @tanstack/react-query-devtools
# or
yarn add @tanstack/react-query-devtools
Luego en index.js:
import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
ReactDOM.createRoot(document.getElementById("root")).render(
<React.StrictMode>
<QueryClientProvider client={queryClient}>
<App />
<ReactQueryDevtools initialIsOpen={false} />
</QueryClientProvider>
</React.StrictMode>
);
Creando API Client
npm i axios
pnpm add axios
yarn add axios
en src/api/productsApi.js:
import axios from 'axios';
const productsApi = axios.create({
baseURL: 'http://localhost:3000/api/products',
});
export const getProducts = () => productsApi.get('/');
export const getProductById = (id) => productsApi.get(`/${id}`);
export const createProduct = (product) => productsApi.post('/', product);
export const updateProduct = (id, product) => productsApi.put(`/${id}`, product);
export const deleteProduct = (id) => productsApi.delete(`/${id}`);
export default productsApi;
Creación del Backend
Para este proyecto crearemos una API REST Falsa usando json-server, el modulo de npm para crear REST APIs de pruebas.
crea una carpeta llamada db, en la raiz de directorios de tu proyecto, en db/products.json
{
"products": [
{
"id": 1,
"name": "Product 1",
"price": 100,
"quantity": 1,
"description": "Product 1 description"
},
{
"id": 2,
"name": "Product 2",
"price": 200,
"quantity": 2,
"description": "Product 2 description"
},
{
"id": 3,
"name": "Product 3",
"price": 300,
"quantity": 3,
"description": "Product 3 description"
},
{
"id": 4,
"name": "Product 4",
"price": 400,
"quantity": 4,
"description": "Product 4 description"
}
]
}
Una vez creado simplemente ejecuta el siguiente comando:
npm i json-server
json-server db/products
npx json-server db/products.json
o si usas pnpm:
pnpm exec json-server db/products.json
Fetch Data
components/Products.jsx
import { useQuery } from "@tanstack/react-query";
import { getProducts } from "../api/productsApi";
const Products = () => {
const {
isLoading,
data: products,
isError,
error,
} = useQuery({
queryKey: ["products"],
queryFn: getProducts,
});
if (isLoading) return <div>Loading...</div>;
else if (isError) return <div>{error.message}</div>;
return JSON.stringify(products);
};
export default Products;
A partir de aqui tambien se añadiran mutaciones para crear, actualizar y eliminar datos.