Aller directement au contenu principal
Mobile Guides

Maîtriser les alertes React Native : Guide & meilleures pratiques API

Maîtriser les alertes React Native API. Créer des alertes, des confirmations et gérer les différences de plateforme avec les meilleures pratiques pour l'accessibilité.

Maîtriser les alertes React Native : Guide & meilleures pratiques API

Vous déclenchez Alert.alert() dans React Native, testez sur iPhone et Android, et cela ressemble à être terminé. Puis quelqu'un ouvre la version web et rien n'apparaît. Ou Android ignore le flux de demande 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.

C'est la forme de l'alerte React Native API. C'est excellent pour des flux de confirmation rapides et natifs. C'est aussi étroit, lié à un appareil et facile à mal utiliser en production. La bonne nouvelle est que le chemin heureux est simple, et les arêtes rugueuses sont prévisibles une fois que vous savez où elles sont.

Table des matières

Afficher des messages simples avec Alert.alert

Pour une interface utilisateur 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>
  );
}

Une 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 le flux, il doit donc transmettre des informations dont l'utilisateur a besoin immédiatement, et non des bruits de statut mineurs.

Ce que la fonctionnalité de base vous offre

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 de bouton 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 rendre utile.

  • Utilisez un titre direct« Échec de l'upload » est plus clair que « Notice ».
  • Gardez le message courtLes alertes sont pour un contexte immédiat, pas une explication détaillée.
  • Réservez les alertes pour les informations bloquantesSi l'utilisateur peut continuer sans interruption, un toast est souvent un meilleur choix.

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

Où les équipes l'abusent

L'erreur la plus courante est d'utiliser les alertes comme un système de messagerie générique. Si chaque action de réussite montre un dialogue bloquant, l'application commence à sentir lourd rapidement.

L'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 de UX entourants tôt, de la même manière qu'elles standardisent splash screen behavior in React Native apps.

Utilisations pertinentes d'une alerte simple

Scénario Pourquoi Alert fonctionne
Confirmation de sauvegarde après une modification critique des paramètres 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 l' buttons tableau. C'est là où Alert.alert() devient plus qu'une simple boîte de message.

Gestion des entrées utilisateur avec boutons de confirmation

La plupart des utilisations réelles d'alerte ne sont pas informatives. 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>
  );
}

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

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

  • text exécuté lorsque ce bouton est tapé.
  • onPress communiquant le sens, surtout sur iOS.
  • style communique son sens, en particulier sur iOS.

Éviter les étiquettes de bouton qui entraînent des erreurs

L’API vous permet d'écrire « OK » et passer à autre chose. C'est généralement insuffisant. Le libellé doit décrire la conséquence, surtout pour les actions destructrices.

Comparez ces deux ensembles :

  • Étiquettes faibles: OK / Annuler
  • Étiquettes meilleures: Supprimer l'élément / Garder l'élément

La deuxième version supprime l'ambiguïté. Cela compte dans les flux destructeurs, et cela compte encore plus lorsque l'alerte apparaît après une erreur ou une opération asynchrone. Le texte des boutons devrait répondre, « Qu'est-ce qui se passe si je clique sur cela ? »

Si votre flux collecte du texte de l'utilisateur ailleurs, un modèle de compagnon propre est de pairer les alertes avec des champs de formulaire explicites comme un champ dédié Implémentation de TextInput React Native au lieu de tenter de surcharger le dialogue.

Quels styles de boutons signifient vraiment

Le style champ est sémantique, pas décoratif. Utilisez-le pour communiquer votre intention.

Style Lorsqu'il faut l'utiliser Remarques
default Actions normales Bon pour des choix neutres
cancel Sortir ou revenir en arrière Important pour un rejet sûr
destructive Action irréversible Mis en évidence visuellement sur iOS

La benchmarking technique de Gluestack note que les conventions de plateforme ont ici une importance. iOS place le annuler sur la gauche et confirmer à droite, tandis que Android inverse cela. Violer ces conventions entraîne une augmentation des indicateurs de confusion des utilisateurs de 25% à l'échelle mondiale, et 45% de l'alerte critique dans les applications de production manque d'un chemin de cancel ou de sortie obligatoire, ce qui augmente les actions irréversibles et le volume de support. Cette même analyse note également que les implémentations d'alerte personnalisées échouent souvent sur l'ordre de lecture pour les technologies d'assistance. Consultez le guide de l'alerte Gluestack.

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

Pour une démonstration visuelle plus approfondie de la configuration des boutons et du flux d'interaction, ce court démo 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 ennuyant, et c'est pourquoi il est bon. Les alertes doivent rester prévisibles.

A 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 expédie une mise en production web. L’API ressemble uniforme dans code, mais les plateformes ne 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

L'ordre 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 de boutons doivent rester univoques entre les plateformes.

Support technique est la plus grande incohérence. 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 iOS uniquement à moins que vous ne construisez une voie séparée.

Utilisez une vérification de plateforme tôt au lieu 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 Android de substitution est moins pratique. Il est encore la meilleure option. En production, une redirection vers une page dédiée ou un modale contrôlé est plus facile à tester, plus facile à localiser et plus facile à rendre accessible qu'une prompt fictif construit autour du comportement non pris en charge.

Le support web nécessite son propre plan

La documentation officielle de l'Alert API de React Native liste le support pour iOS et Android dans le Référence de l'Alerte React Native. Si votre application fonctionne également sur React Native Web ou Expo Web, laisser les avertissements non enveloppés entraîne un échec total pour cette voie d'interaction dans les builds web (Discussion sur le support des alertes dans React Native Web ).

C'est pas un cas d'extrémité. Les équipes le découvrent souvent tardivement car les tests de QA mobile passent en premier, tandis que la couverture du navigateur arrive plus tard.

Utilisez une enveloppe native uniquement si vous ajoutez un wrapper.

Cette enveloppe aide également si votre équipe compare les avantages de l'exécution hybride entre les plateformes, surtout dans une Comparaison d'architecture React Native vs. Capacitor .

Un modèle de polyfill web simple

For many apps, the first workable fix is a small abstraction around the platform split:

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 },
  ]);
}

Cet modèle résout le fossé de support immédiat, mais il a des limites. window.confirm Cela vous donne 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, pas une réponse finale pour les flux qui nécessitent une revue d'accèsibilité, une file d'attente d'avertissements ou un comportement cohérent entre mobile et web.

Quand utiliser un Modale personnalisé au lieu d'un Avertissement

Les dialogues d'avertissement natives sont puissants car ils sont limités. Cette même limitation est pourquoi ils cesseront rapidement d'être la bonne outil.

If vous avez besoin Contrôle de l'aspect, maquette, icônes, champs de formulaire, espacement personnalisé, synchronisation de l'animation, ou cohérence visuelle interplateforme., arrêtez de lutter contre API. Utilisez un modale personnalisé.

Un cadenas en laiton à côté d'un mécanisme de roue dentée métallique complexe sur un fond blanc.

Native alert limits you can’t code around

Vous ne pouvez pas faire Alert.alert() apparaître comme votre système de conception. C'est par design. React Native vous fait hériter de l'apparence native et des contraintes natives.

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

  • Une boîte de dialogue de confirmation personnalisée Un formulaire à plusieurs champs
  • à l'intérieur du modale dans la fenêtre modale
  • Un flux destructif plus riche Avec reconnaissance de case à cocher
  • Une demande de note ou de commentaire avec des étoiles, des illustrations 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 Native React Utilisez l'Alerte native

Utilisez une modal personnalisée Message de message court
Message bref 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 sur tous les plateformes
Vous souhaitez l'implémentation la plus rapide. You need layout and animation control

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 à vie, vous pouvez centraliser un composant de dialogue et conserver votre modèle d'interaction cohérent.

L'instant où vous commencez à souhaiter que Alert ait "juste une autre propriété", vous avez probablement besoin d'un modal.

Candidats idéaux pour les bibliothèques modales personnalisées

La fonction intégrée Modal le composant fonctionne, mais beaucoup d'équipes choisissent un wrapper comme react-native-modal car elle ajoute des contrôles pratiques autour de la visibilité, du comportement de fond et de l'animation.

C'est 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 connexes comme un Feuille d'action d'Ionic sont souvent un modèle mental plus approprié que d'essayer de plier Alert en forme.

Une mise en garde est importante ici. Ne remplacez pas chaque avertissement par un modèle personnalisé juste parce qu'il ressemble mieux. Les avertissements natifs gagnent encore en vitesse, en familiarité et en faible risque d'implémentation. Utilisez un modèle car l'interaction le nécessite, et non parce que l'équipe de conception déteste le chrome système.

Modèles de production pour des avertissements React Native fiables

Une demande de suppression échoue, le gestionnaire de réessai déclenche et le contrôle de session expirée fonctionne au même moment. Sans une stratégie d'avertissement claire, les utilisateurs peuvent se faire frapper par des dialogues superposés, une perte de focus ou un no-op sur le web car Alert.alert Ce problème n'est pas implémenté là. Ces bugs proviennent généralement de l'architecture, et non de l'appel API lui-même.

Centralisez les alertes au lieu d'appeler les alertes partout

Direct 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 un service d'alerte mondial, la solution est trouvée. Utilisez Redux, Zustand ou React Context. La sélection de l'entrepôt compte moins que le contrat. Les demandes d'alerte entrent dans une file d'attente, un dialogue est actif à la fois, et le web peut passer à un fallback basé sur un modèle derrière le même interface.

Les développeurs discutant des modèles d'abstraction d'alerte ont souligné la même mode de failure à plusieurs reprises : les applications mal structurées finissent souvent par avoir des dialogues empilés qui piégent les utilisateurs ou cachent l'action dont ils ont besoin, parfois affectant environ 30-40% de les implémentations discutées en pratique (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 la répéter ici. La solution pratique est simple. Enveloppez l’API une fois, filez les demandes globalement, et faites en sorte que le rendu soit responsable d'un seul alerte visible.

Voici une forme compacte au style de 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 de l'interface s'abonne à l'élément de file d'attente 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 la mise en œuvre

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 demande Android, vous prenez en charge le comportement que le dialogue système gère gratuitement.

La comparaison de Gluestack des options d'alerte React Native souligne que les implémentations modales personnalisées cassent souvent l'ordre de lecture attendu Titre → Message → Boutons, avec des échecs signalés autour de 60% en ce domaine dans leur benchmark de gestion de l'accessibilité (Gluestack’s React Native Alert vs Modal comparaison d'accessibilité). 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 alerte UI personnalisée, gardez ce checklist court et contraignant :

  • Déplacer le focus dans le dialogue lorsqu'il s'ouvre.
  • Retourner le focus sur le déclencheur après la fermeture.
  • Conservé l'ordre de lecture intact: titre, message, puis actions.
  • Fournir un chemin de cancel clair, surtout pour les flux destructeurs.
  • Étiqueter les actions avec précision. « Supprimer » est mieux que « OK » lorsque les conséquences comptent.

Accessibility bugs in alert flows are easy to miss during normal QA. Keyboard users and screen reader users find them first.

Testez le déclencheur, pas le dialogue du système

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

Un modèle 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 également ici. 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.

Une base de production qui tient la route

For apps past the prototype stage, use a small set of rules:

  1. Wrap Alert.alert dans un assistant La logique de fallback web se trouve dans un seul endroit.
  2. Demandes de dialogue en file d'attente globalement Ainsi, seuls un alerte est visible à la fois.
  3. Considérer le support de la prompt Android comme manquant Et prévoir un fallback modal au lieu de se diviser tard.
  4. Exiger des actions d'annulation pour les opérations destructrices ou irréversibles.
  5. Simuler les alertes dans les tests et affirmer les étiquettes, les appels de rappel et l'ordre.
  6. Use a custom modal only when neededcomme la parité web, l'entrée de prompt ou un contenu plus riche.

Cela maintient les alertes natives rapides là où elles 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

When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.

Soutien humain de Martin

Commencez Maintenant

Un soutien humain de Martin

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