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.