Allez directement au contenu principal
Mobile Guides

Master React Native Alert: API Guide & Best Practices

Master the React Native Alert API. Create alerts, confirmations, and handle platform differences with best practices for accessibility.

Master React Native Alert: API Guide & Best Practices

Vous déclenchez Alert.alert() dans React Native, testez sur iPhone et Android, et cela semble terminé. Puis quelqu'un ouvre la version web et rien n'apparaît. Ou Android ignore le flux de confirmation que vous avez utilisé sur iOS. Ou deux parties de l'application déclenchent des alertes à la fois et l'utilisateur se retrouve coincé dans un empilement de dialogues chaotique.

That’s the shape of the React Native Alert API. It’s great for fast, native confirmation flows. It’s also narrow, platform-bound, and easy to misuse in production. The good news is that the happy path is simple, and the rough edges are predictable once you know where they are.

Tableau de Contenu

Afficher des messages simples avec Alert.alert

Pour une interface de notification de base, Alerte Native React est toujours l'outil le plus rapide dans la boîte. Vous importez Alert, appelez Alert.alert(), et la plateforme affiche un dialogue natif. Aucune dépendance supplémentaire, aucun état modal personnalisé, aucun travail de style.

La version la plus simple n'a besoin que d'un titre et d'un message :

import React from 'react';
import { View, Button, Alert } from 'react-native';

export default function ProfileScreen() {
  const showSavedMessage = () => {
    Alert.alert('Profile updated', 'Your changes were saved successfully.');
  };

  return (
    <View style={{ padding: 24 }}>
      <Button title="Save profile" onPress={showSavedMessage} />
    </View>
  );
}

Vue rapprochée d'une personne utilisant un smartphone montrant un message d'alerte simple sur l'écran.

Cet modèle fonctionne bien lorsque l'utilisateur n'a pas besoin de prendre une décision significative. Pensez à « paramètres enregistrés », « session expirée » ou « fonctionnalité indisponible pour le moment ». Le dialogue interrompt la progression, il doit donc transmettre des informations dont l'utilisateur a besoin immédiatement, et non des bruits de statut mineurs.

Ce que la mise en appel de base vous donne

Un plain Alert.alert(title, message) est utile car il reste natif. Le système d'exploitation gère la présentation visuelle, les rôles des boutons et le modèle d'interaction standard. Pour beaucoup d'équipes, c'est exactement le bon compromis.

Un certain nombre de règles pratiques aident à le garder utile :

  • Utilisez un titre direct« L'upload a échoué » est plus clair que « Avertissement ».
  • Conservez le message court.Les alertes sont pour un contexte immédiat, pas une explication de longue haleine.
  • Réservez les alertes pour les informations bloquantes.Si l'utilisateur peut continuer sans interruption, un toast est souvent un meilleur choix.

Conservez les alertes petites et décisives. Si l'utilisateur doit lire un paragraphe, le dialogue est probablement le mauvais UI.

Où les équipes abusent d'elle

L'erreur la plus courante est d'utiliser les alertes comme un système de messagerie générique. Si chaque action de succès montre un dialogue bloquant, l'application commence à sentir lourde rapidement. Les alertes natives sont les plus fortes lorsqu'elles arrêtent l'utilisateur pour une raison.

Une autre erreur est de coupler les alertes trop étroitement aux composants internes. Un petit gestionnaire de bouton est acceptable au début, mais une fois les flux s'étendent sur plusieurs écrans et actions asynchrones, les appels d'alerte dispersés partout deviennent difficiles à raisonnement. C'est une raison pour laquelle les équipes standardisent souvent les modèles d'expérience utilisateur entourant tôt, de la même manière qu'elles standardisent le comportement de l'écran de démarrage dans les applications React Native.

Bonnes utilisations d'une alerte simple

Scénario Why Alert fonctionne
Enregistrer la confirmation après un changement de paramètres critique L’utilisateur a besoin d'une reconnaissance explicite
Avertissement de déconnexion de session Le message est urgent et orienté vers une action
Avertissement de fonctionnalité non prise en charge L'application a besoin d'arrêter et d'expliquer

Si vous avez besoin que l'utilisateur choisisse entre des chemins, le prochain pas est le buttons tableau. C'est là que Alert.alert() devient plus qu'une simple boîte de message.

Gestion de l'entrée utilisateur avec boutons de confirmation

La plupart des utilisations réelles d'alerte ne sont pas des informations. C'est sur une décision. Supprimer le brouillon, annuler les modifications, se déconnecter, réessayer une requête échouée. C'est là que buttons array compte.

Voici un dialogue de confirmation courant :

import React from 'react';
import { View, Button, Alert } from 'react-native';

export default function DangerZone() {
  const confirmDelete = () => {
    Alert.alert(
      'Delete item',
      'This action cannot be undone.',
      [
        {
          text: 'Cancel',
          style: 'cancel',
        },
        {
          text: 'Delete',
          style: 'destructive',
          onPress: () => {
            console.log('Deleting item...');
          },
        },
      ]
    );
  };

  return (
    <View style={{ padding: 24 }}>
      <Button title="Delete item" onPress={confirmDelete} />
    </View>
  );
}

Une personne appuyant sur un bouton rouge et un bouton vert sur un panneau de contrôle sur une table en bois.

Chaque bouton est un objet. Dans la pratique, vous utiliserez trois propriétés le plus souvent :

  • text est l'étiquette affichée à l'utilisateur.
  • onPress s'exécute lorsque ce bouton est tapé.
  • style communiquera le sens, surtout sur iOS.

Choisir des étiquettes de bouton qui réduisent les erreurs

L’API vous permet d'écrire « OK » et de passer à autre chose. C'est généralement insuffisant. L'étiquette doit décrire le résultat, surtout pour les actions destructrices.

Comparez ces deux ensembles :

  • Étiquettes faibles: OK / Annuler
  • Étiquettes améliorées: Supprimer l&#39;élément / Garder l&#39;élément

La deuxième version supprime l&#39;ambiguïté. Cela compte dans les flux destructeurs, et cela compte encore plus lorsque l&#39;alerte apparaît après une erreur ou une opération asynchrone. Le texte du bouton devrait répondre, « Qu&#39;arrive-t-il si je clique dessus ? »

Si votre flux collecte du texte de l&#39;utilisateur ailleurs, un modèle de compagnon propre est de pairer les alertes avec des entrées de formulaire explicites telles qu&#39;une implémentation dédiée de au lieu d&#39;essayer de surétendre le dialogue. Quels styles de boutons signifient réellement

Le

champ est sémantique, et non décoratif. Utilisez-le pour communiquer votre intention. style Style

Lorsque l&#39;utiliser Remarques Notes
default Actions normales Bon pour les choix neutres
cancel Sortir ou revenir en arrière Important pour la mise à l'écart sûre
destructive Action irréversible Mis en évidence visuellement sur iOS

Selon les notes de Gluestack, les benchmarks techniques montrent que les conventions de la plateforme ont ici une grande importance. Sur iOS, la bouton d'annulation est placé à gauche et la bouton de confirmation à droite, tandis que sur Android, les rôles sont inversés. Violer ces conventions entraîne une augmentation des indicateurs de confusion des utilisateurs de annuler bouton sur la gauche et bouton de confirmation sur la droite, tandis que sur Android, les rôles sont inversés. Violer ces conventions entraîne une augmentation des indicateurs de confusion des utilisateurs de marchés mondiaux, et 25% 20% 45% Les alertes critiques dans les applications de production manquent souvent d'une voie de sortie obligatoire ou d'une option d'annulation, ce qui augmente les actions irréversibles et le volume de soutien. Cette même analyse souligne également que les implémentations d'alertes personnalisées échouent souvent dans l'ordre de lecture pour les technologies d'assistance. Consultez le guide de l'alerte de Gluestack. Le guide de l'alerte de Gluestack.

Règle pratique : Tout alerte destructive doit inclure une façon explicite de sortir.

Pour une présentation visuelle plus détaillée de la configuration et de la navigation des boutons, ce démo court est à voir.

Un modèle de confirmation plus sûr

Lorsque l'action est sensible, gardez l'appel en retour mince :

Alert.alert(
  'Sign out',
  'You will need to log in again to continue.',
  [
    { text: 'Stay signed in', style: 'cancel' },
    {
      text: 'Sign out',
      style: 'destructive',
      onPress: async () => {
        try {
          await signOut();
        } catch (error) {
          Alert.alert('Sign out failed', 'Please try again.');
        }
      },
    },
  ]
);

Ce modèl’est ennuyeux, et c'est pourquoi il est bon. Les alertes doivent rester prévisibles.

Un bug de production courant ressemble à ceci. Le même Alert.alert() appel fonctionne sur iOS, fonctionne sur Android, puis échoue à fonctionner une fois que l'équipe a expédié une mise à jour web. L’API semble uniforme dans code, mais les plateformes ne le sont pas.

Un tableau de comparaison mettant en évidence les différences spécifiques aux plateformes entre les dialogues d'alerte iOS et Android dans le développement React Native.

iOS et Android ne correspondent pas parfaitement

La disposition des boutons est le premier endroit où les équipes se font piéger. React Native délègue les alertes au système d'exploitation, donc les utilisateurs voient des conventions natives, pas une abstraction React Native. C'est généralement le bon compromis, mais cela signifie que les étiquettes des boutons doivent rester univoques sur les plateformes.

Le support de la saisie de texte est le plus grand décalage. iOS prend en charge Alert.prompt pour une saisie de texte légère. Android ne le fait pas. Si un flux dépend de l'entrée d'un mot de passe, de la renommage d'un élément ou de la capture d'une note courte à l'intérieur de l'alerte elle-même, ce flux est réservé à iOS à moins que vous ne construisez un chemin séparé.

Utilisez une vérification de plateforme tôt plutôt que de prétendre que les API s'alignent.

import { Alert, Platform } from 'react-native';

export function requestPassword() {
  if (Platform.OS === 'ios') {
    Alert.prompt(
      'Enter password',
      'Please confirm your password.',
      [
        { text: 'Cancel', style: 'cancel' },
        {
          text: 'Continue',
          onPress: (value) => {
            console.log('Password entered:', value);
          },
        },
      ],
      'secure-text'
    );
    return;
  }

  Alert.alert(
    'Confirmation required',
    'Please continue to the next screen to confirm this action.',
    [{ text: 'OK' }]
  );
}

Cet échec Android est moins pratique. Il est encore la meilleure option. En production, une redirection vers une page dédiée ou un modal contrôlé est plus facile à tester, plus facile à localiser et plus facile à rendre accessible qu'une fausse saisie construite autour d'un comportement non pris en charge.

Le support Web nécessite son propre plan

La documentation officielle d'Alert de React Native API liste le support pour iOS et Android dans le La référence d'Alert de React Native. Si votre application fonctionne également sur React Native Web ou Expo Web, laisser les alertes non enveloppées crée une failure complète pour cette voie d'interaction sur les builds web (La discussion sur le support de l'alerte dans React Native Web).

. Ce n'est pas un cas d'extrême niche. Les équipes le découvrent souvent tardivement car la couverture QA mobile passe en premier, tandis que la couverture du navigateur arrive plus tard.

Traitez l'alerte native comme mobile uniquement à moins que vous n'ajoutiez un wrapper.

Ce wrapper aide également si votre équipe compare les avantages de la runtime hybride entre les plateformes, surtout dans une comparaison d'architecture React Native vs. Capacitor.

Un modèle de polyfill web simple

Pour de nombreuses applications, la première solution fonctionnelle est une petite abstraction autour de la séparation de plateforme :

import { Alert, Platform } from 'react-native';

type ConfirmOptions = {
  title: string;
  message?: string;
  onConfirm?: () => void;
  onCancel?: () => void;
};

export function confirmDialog({
  title,
  message,
  onConfirm,
  onCancel,
}: ConfirmOptions) {
  if (Platform.OS === 'web') {
    const result = window.confirm(message ? `${title}\n\n${message}` : title);
    if (result) onConfirm?.();
    else onCancel?.();
    return;
  }

  Alert.alert(title, message, [
    { text: 'Cancel', style: 'cancel', onPress: onCancel },
    { text: 'OK', onPress: onConfirm },
  ]);
}

Ce modèle résout la lacune de support immédiate, mais il a des limites. window.confirm Vous obtenez presque aucun contrôle sur la mise en forme, le comportement de focus ou les hooks d'analytique. Il s'agit d'un filet de sécurité raisonnable pour les confirmations simples, et non une réponse finale pour les flux qui nécessitent une revue d'accès, une file d'attente d'alerte ou un comportement cohérent entre mobile et web.

Utiliser un Modale personnalisé au lieu d'une alerte

Les dialogues d'alerte natives sont puissants parce qu'ils sont limités. Cette même limitation est pourquoi ils cesseront rapidement d'être la bonne solution.

Si vous avez besoin de la personnalisation de la marque, du contrôle de la disposition, des icônes, des champs de formulaire, d'une mise en page personnalisée, d'une animation temporelle ou d'une cohérence visuelle entre les plateformes, arrêtez de lutter contre API. Utilisez un modale personnalisé.

A un cadenas en laiton assis à côté d'un mécanisme de rouage métallique complexe sur un fond blanc.

Native alert vous impose des limites que vous ne pouvez pas code.

Vous ne pouvez pas faire Alert.alert() ressembler à votre système de conception. C'est ainsi conçu. React Native remet la gestion de la rendu à l'OS, vous hérite donc de l'apparence native et des contraintes natives.

C'est bien quand vous voulez une confirmation rapide. C'est mal quand votre produit demande l'un de ces éléments:

  • Un dialogue de confirmation personnalisé avec logo, texte d'aide et hiérarchie personnalisée Un formulaire à plusieurs champs
  • dans un modal Un flux destructeur plus riche
  • avec une case à cocher d'acknowledgment Une demande de note ou de commentaire
  • Un dialogue de confirmation personnalisé avec logo, texte d'aide et hiérarchie personnalisée avec des étoiles, une illustration et des boutons personnalisés

Une fois que ces exigences apparaissent, l'alerte native devient un cul-de-sac.

Un filtre de décision simple

Utilisez Alerte React Native lorsque le dialogue est :

Utilisez l'Alerte native Utilisez un modal personnalisé
Message court Contenu riche ou structuré
Une à trois actions de base Champs de formulaire ou composants intégrés
Un aspect visuel natif est acceptable La cohérence visuelle est importante entre les plateformes
Vous voulez une mise en œuvre la plus rapide possible Vous avez besoin de contrôle sur la disposition et les animations

Un modale personnalisé est également utile lorsque vos builds mobiles et web ont besoin du même comportement. Au lieu de spécialiser chaque plateforme à tout jamais, vous pouvez centraliser un composant de dialogue unique et conserver votre modèle d'interaction cohérent.

Le moment où vous commencez à souhaiter que Alert avait ‘juste une autre propriété’, vous avez probablement besoin d’un modale.

Les candidats idéaux pour les bibliothèques de modales personnalisées

Le composant intégré fonctionne, mais beaucoup d'équipes choisissent un wrapper comme Modal car il ajoute des contrôles pratiques autour de la visibilité, du comportement de fond et de l'animation. react-native-modal C'est tout particulièrement utile pour les flux qui ressemblent à des feuilles d'actions, des tiroirs inférieurs ou des panneaux de confirmation composés. Si votre conception se situe plus près d'un menu qu'un avertissement natif strict, des modèles d'interface tels qu'un

feuille d'action d'Ionic feuille d'action offrent souvent un modèle mental plus clair que le fait de tenter de plier Alert à sa forme.

Un avertissement compte ici. Ne remplacez pas chaque alerte par un modale personnalisé juste parce qu'il ressemble mieux. Les alertes natives gagnent encore en vitesse, en familiarité et en faible risque d'implémentation. Utilisez un modale parce que l'interaction le nécessite, et non parce que l'équipe de design déteste le chrome système.

Modèles de production pour des alertes React Native fiables

Une demande de suppression échoue, le gestionnaire de réessai déclenche, et la vérification de session expirée s'exécute au même moment. Sans une stratégie d'alerte claire, les utilisateurs peuvent être frappés par des dialogues superposés, une perte de focus ou un no-op sur le web parce que Alert.alert n'est pas implémenté là-bas. Ces bogues proviennent généralement de l'architecture, et non de l'appel API lui-même.

Centralisez les alertes au lieu d'appeler partout

Les appels directs éparpillés sur les écrans ne tiennent pas la route dans un codebase plus vaste. Un composant gère une erreur de __CAPGO_KEEP_0__, un autre demande la confirmation de navigation, et un troisième avertit de l'expiration de l'authentification. Si ces événements se produisent à proximité les uns des autres, vous avez besoin d'un ordre, d'une déduplication et d'une logique de fallback de plateforme dans un seul endroit. Alert.alert(...) calls scattered across screens do not hold up in a larger codebase. One component handles an API failure, another asks for navigation confirmation, and a third warns about auth expiry. If those events happen close together, you need ordering, deduplication, and platform fallback logic in one place.

A delete request fails, the retry handler fires, and the session-expired check runs at the same time. Without a clear alert strategy, users can get hit with overlapping dialogs, lost focus, or a no-op on web because

Les développeurs discutant des modèles d'abstraction d'alerte ont souligné à plusieurs reprises le même mode de failure : les applications mal structurées finissent souvent par avoir des dialogues empilés qui piégent les utilisateurs ou cachent l'action qu'ils doivent prendre, parfois affectant environ 30-40% de les implémentations discutées en pratique (la discussion d'implémentation sur l'abstraction d'alerte et l'empilement de dialogues était mentionnée plus tôt dans l'article, il ne faut donc pas répéter le lien ici). La solution pratique est simple. Enveloppez l’API une fois, filez les requêtes globalement, et faites en sorte que le rendu soit responsable d'un seul alerte visible.

Voici une forme compacte au style Zustand :

type AlertRequest = {
  title: string;
  message?: string;
  buttons?: { text: string; onPress?: () => void; style?: 'default' | 'cancel' | 'destructive' }[];
};

type AlertStore = {
  queue: AlertRequest[];
  push: (alert: AlertRequest) => void;
  shift: () => void;
};

La couche d'interface s'abonne à l'élément de file d'attente initial et rend exactement un dialogue. Lorsque l'utilisateur le ferme, le service supprime cet élément et révèle le suivant.

L’accessibilité fait partie de l'implémentation

Les alertes natives vous donnent des valeurs par défaut decentes sur iOS et Android. Le moment où vous introduisez un fallback personnalisé pour le web, du contenu plus riche, ou la remplacement de la boîte de dialogue Android, vous prenez en charge le comportement que la boîte de dialogue système gère gratuitement.

La comparaison de Gluestack des options d'alerte React Native note que les implémentations de modales personnalisées cassent souvent l'ordre de lecture attendu de title → message → buttons, avec des échecs signalés autour 60% de cet aspect dans leur benchmark de gestion de l'accessibilité (la comparaison d'accessibilité des alertes et modales React Native de Gluestack). Cette question spécifique compte car les utilisateurs de lecteurs d'écran s'appuient sur une structure prévisible pour comprendre le dialogue avant d'y agir.

Pour une interface utilisateur d'alerte personnalisée, gardez cette liste de contrôle courte et contraignante :

  • Déplacez le focus dans le dialogue lorsqu'il s'ouvre.
  • Renvoyez le focus sur le déclencheur après la fermeture.
  • Conservez l'ordre de lecture intact: titre, message, puis actions.
  • Fournissez un chemin de cancel clairen particulier pour les flux destructeurs.
  • Étiquetez les actions avec précision. « Supprimer » est mieux que « OK » lorsque la conséquence compte.

Les bogues d'accessibilité dans les flux d'alerte sont faciles à manquer pendant la QA normale. Les utilisateurs de clavier et les utilisateurs de lecteurs d'écran les trouvent en premier.

Testez le déclencheur, pas le dialogue de la plateforme

Les tests unitaires devraient vérifier que votre code a demandé l'alerte que vous attendiez. Ils ne devraient pas dépendre du runtime de dialogue natif.

Un modèle de Jest courant ressemble à ceci :

import { Alert } from 'react-native';

jest.spyOn(Alert, 'alert').mockImplementation(() => {});

it('asks for confirmation before deleting', () => {
  triggerDeleteFlow();

  expect(Alert.alert).toHaveBeenCalledWith(
    'Delete item',
    'This action cannot be undone.',
    expect.any(Array)
  );
});

Cela garde les tests focalisés sur la logique métier et empêche les blocages causés par le comportement du dialogue en dehors de l'environnement de test. Cela pousse également les équipes vers un wrapper API, qui est utile une fois que les limitations des invites web et Android forcent un fallback personnalisé.

La surveillance côté client aide ici aussi. Les équipes qui suivent déjà les échecs d'interaction avec Sentry dans les applications React Native usually catch more alert-related issues when alert-triggering code paths are wrapped in explicit error handling and logged with enough context to reproduce the flow.

Un seuil de production qui tient

Pour les applications au-delà de la phase de prototype, utilisez un petit ensemble de règles :

  1. Enveloppez Alert.alert dans un assistant afin que la logique de fallback web vive dans un seul endroit.
  2. Affichez les demandes de dialogue dans la file d'attente globalement de sorte qu'il n'y ait qu'un seul avertissement visible à la fois.
  3. Gérez le support de la boîte de dialogue Android comme manquant et prévoyez un fallback modal au lieu de faire diverger le code à un stade tardif.
  4. Exigez des actions d'annulation pour les opérations destructrices ou irréversibles.
  5. Simulez les avertissements dans les tests et vérifiez les étiquettes, les appels et l'ordre.
  6. Utilisez uniquement une boîte de dialogue personnalisée lorsque nécessairecomme la parité web, l'entrée de la boîte de dialogue ou un contenu plus riche.

Cela maintient les avertissements natifs rapides là où ils fonctionnent bien et évite de peindre le codebase dans un coin lorsque les différences de plateforme apparaissent plus tard.

Mises à jour en temps réel pour les applications Capacitor.

Lorsqu'un bug de la couche web est actif, envoyez la correction à travers Capgo plutôt que d'attendre des jours pour l'approbation de la boutique d'applications. Les utilisateurs reçoivent la mise à jour en arrière-plan tandis que les modifications natives suivent la voie de revue normale.

Soutien humain de Martin

Commencez Maintenant

Dernières actualités de notre Blog

Capgo vous offre les meilleures informations nécessaires pour créer une application mobile véritablement professionnelle.