UNPKG

@neylorxt/react-request

Version:

It's a mini package that makes it easy for you to send data via axios.

311 lines (236 loc) 8.78 kB
# @neylorxt/react-request > **🎉 Nouvelle version disponible !** Ce package était anciennement connu sous le nom de `@neylorxt/react-api`. Le nom a été mis à jour en `@neylorxt/react-request` pour plus de clarté et cette nouvelle version apporte de nombreuses améliorations ! **@neylorxt/react-request** est un package léger qui simplifie l'envoi de requêtes HTTP avec [Axios](https://axios-http.com/) dans vos projets React. Conçu pour être simple et accessible aux débutants tout en offrant la flexibilité nécessaire aux développeurs expérimentés. ## 🆕 Quoi de neuf dans cette version ? ### ✨ **API Unifiée avec `sendRequest`** - **Nouvelle fonction universelle** : `sendRequest()` peut gérer tous les types de requêtes (GET, POST, PUT, DELETE) - **Interface simplifiée** : Une seule fonction pour toutes vos requêtes - **Flexibilité maximale** : Combine la simplicité et la puissance d'Axios ### 🔧 **API Améliorée pour les fonctions spécialisées** - **Nouvelle signature** : `sendData()`, `updateData()`, `deleteData()` utilisent maintenant un objet `options` pour plus de clarté - **Support des paramètres d'URL** : Toutes les fonctions supportent maintenant les `params` dans la config - **Gestion des erreurs renforcée** : Meilleure détection et catégorisation des erreurs ### 📦 **Support TypeScript natif** - **Types inclus** : Plus besoin d'installer des types séparément - **IntelliSense amélioré** : Autocomplétion et vérification des types ## 🤔 Pourquoi utiliser React Request ? **React Request** a été créé pour simplifier vos interactions avec les API : - **🎯 Simple à utiliser** : Des fonctions claires pour chaque besoin - **🛡️ Gestion d'erreurs simplifiée** : Fini les `try...catch` complexes - **📊 Réponses standardisées** : Format cohérent pour toutes les réponses - **🔄 Flexible** : De l'usage basique aux configurations avancées ## 🚀 Installation ```bash # Installation avec npm npm install axios @neylorxt/react-request # Installation avec Yarn yarn add axios @neylorxt/react-request # Migration depuis l'ancienne version npm uninstall @neylorxt/react-api npm install @neylorxt/react-request@latest ``` ## 🎯 Utilisation ### 🆕 `sendRequest()` - La fonction universelle ⭐ **C'est la nouvelle star du package !** Cette fonction peut tout faire et simplifie grandement votre code. ```javascript import { sendRequest } from '@neylorxt/react-request'; // GET simple const users = await sendRequest('/api/users'); // POST avec données const newUser = await sendRequest('/api/users', { method: 'post', data: { name: 'John', email: 'john@example.com' } }); // PUT avec authentification const updatedUser = await sendRequest('/api/users/1', { method: 'put', data: { name: 'John Updated' }, config: { headers: { Authorization: `Bearer ${token}` } } }); // DELETE avec paramètres const result = await sendRequest('/api/users/1', { method: 'delete', params: { force: true }, config: { headers: { Authorization: `Bearer ${token}` } } }); ``` ### 📥 `getData()` - Récupérer des données ```javascript import { getData } from '@neylorxt/react-request'; // Simple GET const response = await getData('/api/posts'); // GET avec paramètres et authentification const response = await getData('/api/posts', { params: { page: 2, limit: 10 }, headers: { Authorization: `Bearer ${token}` } }); if (response.success) { console.log('Articles :', response.data); } ``` ### 📤 `sendData()` - Envoyer des données (POST) **⚠️ Nouvelle API !** La fonction utilise maintenant un objet `options` pour plus de clarté. ```javascript import { sendData } from '@neylorxt/react-request'; // Ancienne version (toujours supportée) // const response = await sendData(url, data, config); // ✅ Nouvelle version recommandée const response = await sendData('/api/posts', { data: { title: 'Mon article', content: 'Contenu...' }, config: { headers: { Authorization: `Bearer ${token}` }, params: { draft: false } } }); ``` ### 🔄 `updateData()` - Mettre à jour des données (PUT) ```javascript import { updateData } from '@neylorxt/react-request'; const response = await updateData('/api/posts/1', { data: { title: 'Titre mis à jour' }, config: { headers: { Authorization: `Bearer ${token}` } } }); ``` ### 🗑️ `deleteData()` - Supprimer des données (DELETE) ```javascript import { deleteData } from '@neylorxt/react-request'; const response = await deleteData('/api/posts/1', { config: { headers: { Authorization: `Bearer ${token}` }, params: { force: true } } }); ``` ## ⚙️ Configuration avancée ### L'objet `config` - Toute la puissance d'Axios | Propriété | Type | Description | |-----------|------|-------------| | `headers` | `object` | En-têtes personnalisés (Authentication, Content-Type, etc.) | | `params` | `object` | Paramètres d'URL (?page=1&limit=10) | | `timeout` | `number` | Timeout en millisecondes | | `withCredentials` | `boolean` | Envoyer les cookies cross-domain | | `responseType` | `string` | Format de réponse ('json', 'blob', 'text') | ### Exemple complet avec authentification ```javascript import { sendRequest } from '@neylorxt/react-request'; const token = localStorage.getItem('authToken'); const config = { headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, params: { include: 'comments,author', page: 1 }, timeout: 10000 }; // Récupérer des articles avec commentaires const response = await sendRequest('/api/posts', { method: 'get', config }); // Créer un nouvel article const newPost = await sendRequest('/api/posts', { method: 'post', data: { title: 'Mon titre', content: 'Mon contenu' }, config }); ``` ## 📊 Format de réponse standardisé Toutes les fonctions retournent le même format de réponse : ```javascript // En cas de succès { success: true, status: 200, data: { /* données du serveur */ }, headers: { /* en-têtes de réponse */ } } // En cas d'erreur { success: false, status: 404, data: { /* données d'erreur du serveur */ }, headers: { /* en-têtes de réponse */ }, errorMessage: "Not Found", errorType: "HTTP_ERROR" // ou "NETWORK_ERROR", "CONFIG_ERROR" } ``` ## 🔧 Exemples pratiques ### Authentification complète ```javascript import { sendRequest } from '@neylorxt/react-request'; // Connexion const login = async (credentials) => { const response = await sendRequest('/api/auth/login', { method: 'post', data: credentials }); if (response.success) { const token = response.data.token; localStorage.setItem('authToken', token); return token; } throw new Error(response.errorMessage); }; // Requête authentifiée const fetchUserData = async () => { const token = localStorage.getItem('authToken'); return await sendRequest('/api/user/profile', { config: { headers: { Authorization: `Bearer ${token}` } } }); }; ``` ### Pagination et filtrage ```javascript import { getData } from '@neylorxt/react-request'; const fetchPosts = async (page = 1, filters = {}) => { return await getData('/api/posts', { params: { page, limit: 20, ...filters } }); }; // Usage const posts = await fetchPosts(1, { category: 'tech', status: 'published' }); ``` ## 🚀 Migration depuis l'ancienne version ### Changements de noms ```javascript // Avant import { ... } from '@neylorxt/react-api'; // Maintenant import { ... } from '@neylorxt/react-request'; ``` ### Nouvelle API pour les fonctions spécialisées ```javascript // Avant const response = await sendData(url, data, config); const response = await updateData(url, data, config); const response = await deleteData(url, config); // Maintenant (recommandé) const response = await sendData(url, { data, config }); const response = await updateData(url, { data, config }); const response = await deleteData(url, { config }); // L'ancienne API fonctionne toujours pour la rétrocompatibilité ``` ## 🤝 Contribuer Ce projet est open-source ! Vos contributions sont les bienvenues : - 🐛 Signaler des bugs - 💡 Proposer des améliorations - 📝 Améliorer la documentation - 🔧 Soumettre des pull requests [Contribuer sur GitHub](https://github.com/neylorxt/react-request) ## 📜 Licence MIT License - Utilisez librement dans vos projets !