Esta aplicación fue desarrollada como parte de un proyecto de aprendizaje con el objetivo de construir una app en React utilizando Vite.js, que permite Crear, Leer, Actualizar y Eliminar (CRUD) usuarios mediante una API local simulada con JSON Server. Se enfoca en el manejo eficiente de formularios, validaciones dinámicas, componentes reutilizables y una experiencia visual clara y responsiva.
Se integran múltiples hooks personalizados, validaciones con Zod, formularios reactivos con react-hook-form, y modales reutilizables mediante la propiedad children, todo dentro de una arquitectura modular y escalable.
🔗Disponible solo en servidor local
Construir una aplicación web funcional e interactiva en React usando Vite.js, que permita al usuario:
- Crear nuevos usuarios mediante un formulario validado.
- Visualizar todos los usuarios en tarjetas personalizadas.
- Editar usuarios existentes con formularios dinámicos.
- Eliminar usuarios con confirmación visual.
- Validar entradas con mensajes claros y estructura semántica.
Este proyecto refuerza habilidades clave como:
- Manejo de formularios reactivos con
react-hook-form. - Validaciones con
zody@hookform/resolvers. - Consumo de APIs RESTful con
axios. - Manejo de estados, efectos y renderizado condicional.
- Creación de hooks personalizados para encapsular lógica de peticiones.
- Uso de
childrenpara componentes reutilizables como modales y botones. - Diseño modular, responsivo y accesible.
| Herramienta / Lenguaje | Uso principal |
|---|---|
| React | Construcción modular de componentes. |
| Vite.js | Entorno rápido de desarrollo y bundling. |
| JavaScript (ES6+) | Lógica de búsqueda, validaciones y renderizado. |
| CSS / SCSS | Estilos personalizados y estructurados. |
| HTML / JSX | Estructura declarativa de la app. |
| Axios | Comunicación con la API. |
| React Icons | Íconos personalizables y semánticos. |
| React Hook Form | Manejo eficiente de formularios. |
| Zod | Validaciones declarativas y robustas. |
| ESLint + Plugins | Liting para calidad y consistencia del código. |
| Tecnología / API | Funcionalidad |
|---|---|
| JSON Server | Simulación de API RESTful para usuarios. |
| Custom Hook(useUsersCrud) | Encapsula lógica de peticiones HTTP. |
| Custom Hook(usePagination) | Encapsula lógica para la paginación en los usuarios. |
| Custom Hook(useModal) | Encapsula lógica para el funcionamiento del modal. |
useState: Control de inputs, errores, modales y usuarios.useEffect: Carga inicial de usuarios y sincronización de estados.react-hook-form: Captura y validación de datos del formulario.zod: Validaciones declarativas y reutilizables.useUsersCrud: Custom hook para manejar todas las peticiones HTTP (GET, POST, PUT, PATCH, DELETE).- Propiedad
children: Para modales, botones y componentes reutilizables. - Componentes personalizados.:
UserCard,Form,Modal,LoadingScreen,Pagination,UserContent.
- Loader con un carrusel animado que contiene tarjetas de usuario creadas al azar(sin mostrar datos).
- Carga de los datos en tarjetas de usuarios, cada usuario contiene sus respectivos datos preestablecidos en el archivo json.
- Paginación en botones que muestra seis usuarios por página.
- Formulario dinámico que cambia entre modo creación y edición.
- Validaciones claras con mensajes personalizados.
- Modales de confirmación tras crear, editar o eliminar.
- Diseño responsivo para escritorio y móvil.
- Interacción fluida y retroalimentación visual inmediata.
📁 S04E04/
| ├── 📁 node_modules/
| ├── 📁 public/
| ├── 📁 src/
│ | └── 📁 assets/
│ | └── 📁 components/
│ | | └── Form.jsx
| | | └── LoadingScreen.jsx
| | | └── Modal.jsx
| | | └── Pagination.jsx
| | | └── UserCard.jsx
| | | └── UserContent.jsx
│ | └── 📁 hooks/
| | | └── useCrud.jsx
| | | └── useModal.jsx
| | | └── usePagination.jsx
│ | └── 📁 lib/
│ | | └── utils.js
│ | └── 📁 styles/
│ | | └── App.css
| | | └── Form.css
| | | └── LoadingScreen.css
| | | └── Modal.scss
| | | └── Pagination.css
| | | └── UserCard.css
| | | └── UserContent.css
| | └── App.jsx
| | └── index.css
| | └── main.jsx
| └── db.json-
Listado de usuarios con tarjetas personalizadas.
-
Formulario para crear y editar usuarios:
emailpasswordfirst_namelast_namebirthdayimage_url(opcional) -
Validaciones con
zodyreact-hook-form. -
Modales de confirmación tras acciones exitosas.
-
Hooks personalizados para peticiones HTTP.
-
Diseño modular y componentes reutilizables.
-
Estilos SCSS por componente.
-
Propiedad
childrenpara modales y botones. -
Experiencia responsiva y accesible.
- Clona este repositorio:
git clone https://github.com/Clic-stack/UserCrud-with-Local-Server.git- Instala las dependencias:
npm install- Inicia el servidor local (JSON Server):
npm run api- Ejecuta el proyecto:
npm run devDesarrollado por Clio Salgado como parte del módulo de React en Academlo, con el objetivo de consolidar habilidades en desarrollo frontend, validaciones, consumo de APIs y diseño modular.
🔽 English version below 🔽
This application was developed as part of a learning project with the goal of building a React app using Vite.js that enables Create, Read, Update, and Delete (CRUD) operations for users through a locally simulated API using JSON Server. It focuses on efficient form handling, dynamic validations, reusable components, and a clear, responsive visual experience.
It integrates multiple custom hooks, validations with Zod, reactive forms via react-hook-form, and reusable modals using the children property—all within a modular and scalable architecture.
🔗Available only on local server
Build a functional and interactive web application in React using Vite.js, allowing users to:
- Create new users through a validated form.
- Display all users in personalized cards.
- Edit existing users with dynamic forms.
- Delete users with visual confirmation.
- Validate inputs with clear messages and semantic structure.
This project strengthens key skills such as:
- Reactive form handling with
react-hook-form. - Validations using
zodand@hookform/resolvers. - RESTful API consumption with
axios. - State and effect management with conditional rendering.
- Custom hooks to encapsulate API logic.
- Use of
childrenfor reusable components like modals and buttons. - Modular, responsive, and accessible design.
| Tool / Language | Primary Use |
|---|---|
| React | Modular component construction. |
| Vite.js | Fast development environment and bundling. |
| JavaScript (ES6+) | Logic for search, validations, and rendering. |
| CSS / SCSS | Structured and customized styling. |
| HTML / JSX | Declarative app structure. |
| Axios | API communication. |
| React Icons | Semantic and customizable icons. |
| React Hook Form | Efficient form management. |
| Zod | Declarative and robust validations. |
| ESLint + Plugins | Code quality and consistency. |
| Technology / API | Functionality |
|---|---|
| JSON Server | Simulated RESTful API for users. |
| Custom Hook(useUsersCrud) | Encapsulates HTTP request logic. |
| Custom Hook(usePagination) | Handles pagination logic for users. |
| Custom Hook(useModal) | Manages modal functionality. |
useState: Controls inputs, errors, modals, and user data.useEffect: Loads initial users and syncs state.react-hook-form: Captures and validates form data.zod: Reusable and declarative validations.useUsersCrud: Custom hook for all HTTP requests (GET, POST, PUT, PATCH, DELETE).childrenproperty: For reusable modals, buttons, and components.- Custom Components:
UserCard,Form,Modal,LoadingScreen,Pagination,UserContent.
- Loader with an animated carousel displaying randomly styled user cards (without actual data).
- User data loaded into cards, each showing predefined JSON data.
- Pagination buttons displaying six users per page.
- Dynamic form switching between create and edit modes.
- Clear validations with personalized messages.
- Confirmation modals after create, edit, or delete actions.
- Responsive design for desktop and mobile.
- Smooth interaction and immediate visual feedback.
📁 S04E04/
| ├── 📁 node_modules/
| ├── 📁 public/
| ├── 📁 src/
│ | └── 📁 assets/
│ | └── 📁 components/
│ | | └── Form.jsx
| | | └── LoadingScreen.jsx
| | | └── Modal.jsx
| | | └── Pagination.jsx
| | | └── UserCard.jsx
| | | └── UserContent.jsx
│ | └── 📁 hooks/
| | | └── useCrud.jsx
| | | └── useModal.jsx
| | | └── usePagination.jsx
│ | └── 📁 lib/
│ | | └── utils.js
│ | └── 📁 styles/
│ | | └── App.css
| | | └── Form.css
| | | └── LoadingScreen.css
| | | └── Modal.scss
| | | └── Pagination.css
| | | └── UserCard.css
| | | └── UserContent.css
| | └── App.jsx
| | └── index.css
| | └── main.jsx
| └── db.json-
User listing with personalized cards.
-
Form for creating and editing users:
emailpasswordfirst_namelast_namebirthdayimage_url(optional) -
Validations with
zodandreact-hook-form. -
Confirmation modals after successful actions.
-
Custom hooks for API requests.
-
Modular design and reusable components.
-
SCSS styling per component.
-
Use of
childrenfor modals and buttons. -
Responsive and accessible user experience.
- Clone this repository:
git clone https://github.com/Clic-stack/UserCrud-with-Local-Server.git- Install dependencies:
npm install- Start the local server (JSON Server):
npm run api- Run the project:
npm run devDeveloped by Clio Salgado as part of the React module at Academlo, with the goal of strengthening frontend development skills, validations, API consumption, and modular design.