Schermata React Native con Expo e TypeScript con tutti gli stati

Genera una schermata di app mobile in React Native e TypeScript con stati di caricamento, vuoto, errore e offline, lista ottimizzata, accessibilità, safe area e test con Testing Library. Pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Include 4 variabili personalizzabili e puoi copiarlo gratuitamente con un clic.

Intermedio · Codice · In attesa di revisione editoriale

Prompt

Agisci come sviluppatore mobile senior specializzato in React Native, Expo e TypeScript, attento a prestazioni e accessibilità su iOS e Android.

Contesto:
- Scopo della schermata e azioni dell'utente: {{schermata}}
- Origine dei dati (endpoint, forma della risposta, autenticazione): {{dati}}
- Libreria di navigazione: {{navigazione}}
- Stile visivo e librerie già presenti nel progetto: {{stile}}

Consegne:
1. Struttura dei file: schermata, componenti figli, hook dei dati e tipi.
2. Tipi TypeScript per la risposta dell'API e le props, senza any.
3. Hook dei dati con caricamento, errore, nuovo tentativo, pull-to-refresh e annullamento quando la schermata viene smontata. Se il progetto usa già una libreria per il recupero dati, adattati; altrimenti spiega quando converrebbe adottarne una.
4. Schermata completa con stati chiari: caricamento (skeleton), vuoto con invito all'azione, errore con pulsante per riprovare e offline.
5. Liste con FlatList o un equivalente ottimizzato: keyExtractor stabile, elementi memoizzati, paginazione o scroll infinito se serve.
6. Accessibilità: accessibilityLabel e accessibilityRole, dimensioni minime delle aree toccabili, supporto al testo dinamico e lettura corretta con VoiceOver e TalkBack.
7. Layout adattivo: SafeAreaView o insets, tastiera (KeyboardAvoidingView se ci sono moduli), modalità scura e differenze tra iOS e Android.
8. Test con React Native Testing Library per gli stati di caricamento, errore e successo, con l'API simulata.

Vincoli:
- Non inventare endpoint né campi: se manca la forma della risposta, usa un tipo segnato con [DA COMPLETARE] e chiedimelo.
- Non aggiungere dipendenze senza motivarle e senza indicare l'alternativa senza dipendenze.
- Se la schermata o il flusso non sono chiari, chiedimelo prima di scrivere il codice.

Formato: sezioni numerate, un blocco di codice per file e brevi note sulle scelte.

Come usarlo

Incolla un esempio reale della risposta JSON della tua API e indica le librerie che usi già. Prova la schermata su un dispositivo iOS e uno Android, in modalità aereo e con la dimensione del testo al massimo.

Esempio d'uso

Schermata: elenco ordini dell’utente con filtro per stato e dettaglio al tocco · Dati: GET /orders paginato con token · Navigazione: Expo Router · Stile: StyleSheet con i colori del brand.

Esempio di risultato

3. Hook dei dati — hooks/useRicette.ts

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

export type Ricetta = { id: string; titolo: string; immagine: string; minuti: number }; // tipo dell'id: [DA COMPLETARE]
type RispostaRicette = { items: Ricetta[]; total: number };
type Stato = 'caricamento' | 'errore' | 'ok';

const API_URL = process.env.EXPO_PUBLIC_API_URL;

export function useRicette(ricerca: string) {
  const [ricette, setRicette] = useState<Ricetta[]>([]);
  const [stato, setStato] = useState<Stato>('caricamento');
  const [aggiornando, setAggiornando] = useState(false);
  const controller = useRef<AbortController | null>(null);

  const carica = useCallback(async (eRefresh = false) => {
    controller.current?.abort();                        // annulla la richiesta precedente
    const ctrl = new AbortController();
    controller.current = ctrl;
    if (eRefresh) setAggiornando(true); else setStato('caricamento');
    try {
      // Nome del parametro di ricerca: [DA COMPLETARE]
      const params = new URLSearchParams({ pagina: '1', q: ricerca });
      const res = await fetch(`${API_URL}/api/ricette?${params}`, { signal: ctrl.signal });
      if (!res.ok) throw new Error(`HTTP ${res.status}`);
      const dati = (await res.json()) as RispostaRicette;
      setRicette(dati.items);
      setStato('ok');
    } catch {
      if (!ctrl.signal.aborted) setStato('errore');
    } finally {
      if (!ctrl.signal.aborted) setAggiornando(false);
    }
  }, [ricerca]);

  useEffect(() => {
    carica();
    return () => controller.current?.abort();           // quando la schermata si smonta
  }, [carica]);

  return { ricette, stato, aggiornando, riprova: () => carica(), aggiorna: () => carica(true) };
}

Nessuna nuova dipendenza: se l’app cresce (cache tra schermate, paginazione infinita), varrebbe la pena una libreria di data fetching. La schermata usa stato per mostrare skeleton, errore con pulsante «Riprova» o la FlatList…

Dati chiave

Categoria
Programmazione e sviluppo · App mobile
Tipo di output
Codice
Livello
Intermedio
Pensato per
ChatGPT, Claude, Gemini e Microsoft Copilot
Verificato in
In attesa di verifica editoriale
Variabili
Scopo della schermata, Origine dei dati, Navigazione e Stile e librerie
Lingua
Italiano
Prezzo
Gratuito, senza registrazione
Aggiornato
07/11/2026

Domande frequenti

Il codice funziona in un’app senza Expo?

Quasi tutto sì, perché componenti e hook sono di React Native. Cambieranno le parti che usano moduli Expo, come il rilevamento della connessione o i font; chiedi al modello l’alternativa per React Native CLI.

Perché così tanti stati per una schermata?

Perché in mobilità la rete cade spesso e una schermata bianca sembra un’app rotta. Mostrare caricamento, vuoto, errore e offline migliora l’esperienza e riduce le recensioni negative.

A cosa serve questo prompt?

Genera una schermata di app mobile in React Native e TypeScript con stati di caricamento, vuoto, errore e offline, lista ottimizzata, accessibilità, safe area e test con Testing Library.

Con quali strumenti di IA funziona?

È pensato per ChatGPT, Claude, Gemini e Microsoft Copilot. Non lo abbiamo ancora verificato in questi strumenti, quindi i risultati possono variare da uno all'altro.

Come personalizzo il prompt?

Clicca su «Personalizza» e compila le variabili (Scopo della schermata, Origine dei dati, Navigazione e Stile e librerie). Il testo si aggiorna all'istante e poi puoi copiarlo con un clic. I valori vengono salvati solo nel tuo browser.

Serve esperienza per usarlo?

È di livello intermedio: conviene conoscere l'argomento per fornire un buon contesto e valutare il risultato con occhio critico.

Questo prompt è gratuito?

Sì. Tutti i prompt di HomeCasa Prompts sono gratuiti, senza registrazione né abbonamento. Puoi usarli anche in progetti professionali.

Posso fidarmi dell'output dell'IA?

Consideralo una bozza di alta qualità: verifica sempre dati, cifre e affermazioni importanti prima di pubblicare o prendere decisioni.

Prompt correlati