Écran React Native avec Expo et TypeScript, tous les états compris

Générez un écran d’app mobile en React Native et TypeScript avec états de chargement, vide, erreur et hors ligne, liste optimisée, accessibilité, zone sûre et tests avec Testing Library. Conçu pour ChatGPT, Claude, Gemini et Microsoft Copilot. Il comprend 4 variables personnalisables et vous pouvez le copier gratuitement en un clic.

Intermédiaire · Code · En attente de relecture éditoriale

Prompt

Agis comme développeur mobile senior spécialisé en React Native, Expo et TypeScript, attentif aux performances et à l'accessibilité sur iOS et Android.

Contexte :
- Rôle de l'écran et actions de l'utilisateur : {{ecran}}
- Source des données (endpoint, forme de la réponse, authentification) : {{donnees}}
- Bibliothèque de navigation : {{navigation}}
- Style visuel et bibliothèques déjà présentes dans le projet : {{style}}

Livrables :
1. Structure des fichiers : écran, composants enfants, hook de données et types.
2. Des types TypeScript pour la réponse de l'API et les props, sans any.
3. Un hook de données avec chargement, erreur, nouvelle tentative, pull-to-refresh et annulation au démontage de l'écran. Si le projet utilise déjà une bibliothèque de récupération de données, adapte-toi ; sinon, explique quand elle vaudrait la peine.
4. L'écran complet avec des états clairs : chargement (squelette), vide avec appel à l'action, erreur avec bouton de nouvelle tentative et hors ligne.
5. Des listes avec FlatList ou un équivalent optimisé : keyExtractor stable, éléments mémoïsés, pagination ou défilement infini si pertinent.
6. Accessibilité : accessibilityLabel et accessibilityRole, tailles de cible tactile minimales, prise en charge de la taille de texte dynamique et lecture correcte avec VoiceOver et TalkBack.
7. Mise en page adaptée : SafeAreaView ou insets, clavier (KeyboardAvoidingView s'il y a des formulaires), mode sombre et différences iOS/Android.
8. Des tests avec React Native Testing Library pour les états chargement, erreur et succès, avec l'API simulée.

Contraintes :
- N'invente ni endpoint ni champ : si la forme de la réponse manque, utilise un type marqué [À COMPLÉTER] et pose-moi la question.
- N'ajoute pas de dépendance sans justifier pourquoi ni proposer l'alternative sans dépendance.
- Si l'écran ou le parcours n'est pas clair, demande-moi avant d'écrire le code.

Format : sections numérotées, un bloc de code par fichier et de brèves notes sur les choix.

Comment l'utiliser

Collez un vrai exemple de réponse JSON de votre API et listez les bibliothèques déjà installées. Testez l’écran sur un appareil iOS et un Android, en mode avion et avec la taille de police au maximum.

Exemple d'utilisation

Écran : liste des commandes de l’utilisateur avec filtre par statut et détail au toucher · Données : GET /orders paginé avec jeton · Navigation : Expo Router · Style : StyleSheet aux couleurs de la marque.

Exemple de résultat

3. Hook de données — hooks/useRecettes.ts

import { useCallback, useEffect, useRef, useState } from 'react';

export type Recette = { id: string; titre: string; image: string; minutes: number }; // type de l'id : [À COMPLÉTER]
type ReponseRecettes = { items: Recette[]; total: number };
type Etat = 'chargement' | 'erreur' | 'ok';

const API_URL = process.env.EXPO_PUBLIC_API_URL;

export function useRecettes(recherche: string) {
  const [recettes, setRecettes] = useState<Recette[]>([]);
  const [etat, setEtat] = useState<Etat>('chargement');
  const [rafraichit, setRafraichit] = useState(false);
  const controleur = useRef<AbortController | null>(null);

  const charger = useCallback(async (estRafraichissement = false) => {
    controleur.current?.abort();                        // annule la requête précédente
    const ctrl = new AbortController();
    controleur.current = ctrl;
    if (estRafraichissement) setRafraichit(true); else setEtat('chargement');
    try {
      // Nom du paramètre de recherche : [À COMPLÉTER]
      const params = new URLSearchParams({ page: '1', q: recherche });
      const res = await fetch(`${API_URL}/api/recettes?${params}`, { signal: ctrl.signal });
      if (!res.ok) throw new Error(`HTTP ${res.status}`);
      const donnees = (await res.json()) as ReponseRecettes;
      setRecettes(donnees.items);
      setEtat('ok');
    } catch {
      if (!ctrl.signal.aborted) setEtat('erreur');
    } finally {
      if (!ctrl.signal.aborted) setRafraichit(false);
    }
  }, [recherche]);

  useEffect(() => {
    charger();
    return () => controleur.current?.abort();           // au démontage de l'écran
  }, [charger]);

  return { recettes, etat, rafraichit, reessayer: () => charger(), rafraichir: () => charger(true) };
}

Aucune dépendance ajoutée : si l’app grandit (cache entre écrans, pagination infinie), une bibliothèque de data fetching deviendrait intéressante. L’écran s’appuie sur etat pour afficher un skeleton, une erreur avec bouton « Réessayer » ou la FlatList…

Informations clés

Catégorie
Programmation et développement · Applications mobiles
Type de résultat
Code
Niveau
Intermédiaire
Conçu pour
ChatGPT, Claude, Gemini et Microsoft Copilot
Vérifié sur
En attente de vérification éditoriale
Variables
Rôle de l’écran, Source des données, Navigation et Style et bibliothèques
Langue
Français
Prix
Gratuit, sans inscription
Mis à jour
07/11/2026

Questions fréquentes

Le code fonctionne-t-il dans une app sans Expo ?

En grande partie, car les composants et les hooks relèvent de React Native. Les parties qui utilisent des modules Expo, comme la détection de connexion ou les polices, changeront ; demandez au modèle l’alternative pour React Native CLI.

Pourquoi autant d’états pour un seul écran ?

Parce que le réseau mobile coupe souvent et qu’un écran blanc ressemble à une app cassée. Afficher chargement, vide, erreur et hors ligne améliore l’expérience et limite les mauvaises notes.

À quoi sert ce prompt ?

Générez un écran d’app mobile en React Native et TypeScript avec états de chargement, vide, erreur et hors ligne, liste optimisée, accessibilité, zone sûre et tests avec Testing Library.

Avec quels outils d'IA fonctionne-t-il ?

Il est conçu pour ChatGPT, Claude, Gemini et Microsoft Copilot. Nous ne l'avons pas encore vérifié sur ces outils ; les résultats peuvent donc varier de l'un à l'autre.

Comment personnaliser le prompt ?

Cliquez sur « Personnaliser » et remplissez les variables (Rôle de l’écran, Source des données, Navigation et Style et bibliothèques). Le texte se met à jour instantanément et vous pouvez ensuite le copier en un clic. Les valeurs sont stockées uniquement dans votre navigateur.

Faut-il de l'expérience pour l'utiliser ?

Il est de niveau intermédiaire : il vaut mieux connaître le sujet pour fournir un bon contexte et relire le résultat d'un œil critique.

Ce prompt est-il gratuit ?

Oui. Tous les prompts de HomeCasa Prompts sont gratuits, sans inscription ni abonnement. Vous pouvez aussi les utiliser dans des projets professionnels.

Puis-je me fier au résultat de l'IA ?

Considérez-le comme un brouillon de qualité : vérifiez toujours les données, les chiffres et les affirmations importantes avant de publier ou de prendre des décisions.

Prompts similaires