Lompat ke Konten Utama
Mobile Guides

Master Alert React Native: API Panduan & Praktik Terbaik

Masterkan Alert React Native API. Buatlah notifikasi, konfirmasi, dan atasi perbedaan platform dengan praktik terbaik untuk aksesibilitas.

Master Alert React Native: API Panduan & Praktik Terbaik

Anda menyalakan Alert.alert() dalam React Native, tes di iPhone dan Android, dan terasa sudah selesai. Kemudian seseorang membuka build web dan tidak ada yang muncul. Atau Android mengabaikan alur prompt yang Anda gunakan di iOS. Atau dua bagian aplikasi menyalakan peringatan pada saat yang sama dan pengguna terjebak dalam stack dialog yang berantakan.

Itu bentuk dari React Native Alert API. Ini bagus untuk konfirmasi cepat dan asli. Ini juga sempit, terikat platform, dan mudah digunakan dengan tidak tepat dalam produksi. Berita baiknya adalah jalur bahagia sederhana, dan sudut kasar dapat diprediksi jika Anda tahu di mana mereka berada.

Isi Kandungan

Menggunakan Pesan Sederhana dengan Alert.alert

Untuk antarmuka peringatan dasar, Peringatan React Native masih merupakan alat tercepat di kotak. Anda mengimport Alert, memanggil Alert.alert(), dan platform menampilkan dialog asli. Tidak ada dependensi tambahan, tidak ada modul modal kustom, tidak ada pekerjaan gaya.

Versi sederhana hanya memerlukan judul dan pesan:

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

Foto dekat orang menggunakan smartphone menampilkan pesan peringatan sederhana di layar.

Polanya berfungsi baik ketika pengguna tidak perlu membuat pilihan yang bermakna. Pikirkan 'pengaturan disimpan', 'sesi habis', atau 'fitur tidak tersedia saat ini'. Dialog mengganggu aliran, jadi harus membawa informasi yang pengguna butuh sekarang, bukan kebisingan status kecil.

Pesan yang Anda dapatkan dengan panggilan dasar

Pesan sederhana Alert.alert(title, message) bermanfaat karena tetap native. Sistem operasi mengelola presentasi visual, peran tombol, dan pola interaksi standar. Untuk banyak tim, itu adalah perdagangan yang tepat.

Beberapa aturan praktis membantu menjaga kebermanfaatannya:

  • Gunakan judul langsung. “Upload gagal” lebih jelas daripada “Perhatian”.
  • Pertahankan pesan singkat. Peringatan adalah untuk konteks segera, bukan penjelasan panjang.
  • Simpan peringatan untuk informasi menghalangiJika pengguna dapat melanjutkan tanpa gangguan, seringkali sebuah notifikasi toast lebih sesuai.

Tetapkan peringatan kecil dan tegas. Jika pengguna perlu membaca paragraf, maka dialog mungkin tidak merupakan UI yang tepat.

Dimana tim salah menggunakannya

Kesalahan paling umum adalah menggunakan peringatan sebagai sistem pesan umum. Jika setiap aksi sukses menampilkan dialog menghalangi, aplikasi mulai terasa berat cepat. Peringatan native paling kuat ketika menghentikan pengguna untuk alasan tertentu.

Kesalahan lainnya adalah mengkaitkan peringatan terlalu erat dengan komponen internal. Tombol handler kecil baik pada awalnya, tetapi ketika aliran mengalir ke beberapa layar dan aksi asinkron, panggilan peringatan yang terpisah di mana-mana sulit untuk dipahami. Itu adalah alasan mengapa tim sering mengstandarkan pola UX sekitar awal, sama seperti mereka mengstandarkan perilaku layar splash di aplikasi React Native.

penggunaan yang baik untuk peringatan sederhana

Skenario Mengapa Alert berfungsi
Konfirmasi penyimpanan setelah perubahan pengaturan kritis Pengguna memerlukan pengakuan eksplisit
Peringatan waktu sesi habis Pesan ini sangat mendesak dan mengarahkan aksi
Peringatan fitur tidak didukung Aplikasi perlu berhenti dan menjelaskan

Jika Anda memerlukan pengguna untuk memilih antara jalur, langkah berikutnya adalah buttons array. Itu di mana Alert.alert() menjadi lebih dari sebuah kotak pesan sederhana.

Mengelola Input Pengguna dengan Tombol Konfirmasi

Penggunaan Alert yang sebenarnya tidak hanya informatif. Itu tentang keputusan. Menghapus draft, membuang perubahan, keluar, mencoba lagi permintaan yang gagal. Itu di mana array berperan. buttons Contoh dialog konfirmasi umum:

Dialog Konfirmasi yang Umum

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

Seseorang menekan tombol merah dan hijau pada konsol kontrol di atas meja kayu.

Masing-masing tombol adalah sebuah objek. Dalam prakteknya, Anda akan menggunakan tiga properti yang paling sering:

  • text berjalan ketika tombol tersebut ditekan.
  • onPress menyampaikan makna, terutama pada iOS.
  • style Mengilih label tombol yang mengurangi kesalahan

Memilih Label Tombol untuk Mengurangi Kesalahan

Dengan API, Anda dapat menulis "OK" dan melanjutkan. Namun, itu biasanya tidak cukup. Label harus menjelaskan hasilnya, terutama untuk aksi yang merusak.

Bandingkan dua set ini:

  • Label lemah: OK / Batal
  • Label yang lebih baik: Hapus item / Simpan item

Versi kedua menghilangkan keragaman. Hal ini sangat penting dalam aliran penghapusan, dan bahkan lebih penting ketika peringatan muncul setelah kesalahan atau operasi asinkron. Tekst button harus menjawab, “Apa yang terjadi jika saya mengetuk ini?”

Jika aliran Anda mengumpulkan teks dari pengguna di tempat lain, pola teman yang bersih adalah menggabungkan peringatan dengan input formulir eksplisit seperti input dedikasi sebaliknya mencoba mengembangkan dialog terlalu jauh. Apa yang sebenarnya berarti gaya tombol

Apa Sisi Button yang Sebenarnya

Field style Teks bidang ini bersifat semantik, bukan dekoratif. Gunakan untuk menyampaikan maksud.

Stil Menggunakan kapan Catatan
default Aksi normal Bagus untuk pilihan netral
cancel Keluar atau keluar Penting untuk penghapusan aman
destructive Tindakan tidak dapat dibatalkan Ditandai secara visual di iOS

Catatan dari Gluestack bahwa konvensi platform berperan di sini. iOS menempatkan tombol batal pada sisi kiri dan konfirmasi di sebelah kanan, sementara Android mengubahnya. Melanggar konvensi-konvensi tersebut menyebabkan metrik kebingungan pengguna meningkat dengan 25% di pasar global, dan 45% jumlah notifikasi kritis di aplikasi produksi yang kurang jalur batalkan atau keluar, yang meningkatkan aksi tidak dapat dibatalkan dan volume dukungan. Analisis yang sama juga menyebutkan bahwa implementasi notifikasi kustom sering gagal dalam membaca urutan untuk teknologi bantu. Lihatlah Petunjuk Alert Gluestack.

Aturan Praktis: setiap notifikasi destruktif harus mencakup cara keluar yang eksplisit.

Untuk walkthrough visual yang lebih singkat tentang konfigurasi tombol dan alur interaksi, demo singkat ini patut dilihat.

Polanya Konfirmasi yang Lebih Aman

Ketika aksi sensitif, jaga callback tipis:

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

Polanya itu membosankan, dan itu mengapa itu baik. Notifikasi harus tetap prediktif.

A bug produksi yang umum terlihat seperti ini. Yang sama Alert.alert() Memanggil fungsi yang sama bekerja di iOS, bekerja di Android, kemudian gagal berfungsi setelah tim mengirimkan build web. API terlihat seragam di code, tetapi platform tidak sama.

Perbandingan tabel yang menyoroti perbedaan spesifik platform antara dialog peringatan iOS dan Android dalam pengembangan React Native.

IOS dan Android tidak cocok secara sempurna

Urutan tombol adalah tempat pertama tim terjebak. React Native mengirimkan peringatan ke sistem operasi, sehingga pengguna melihat konvensi native, bukan abstraksi React Native. Itu biasanya pilihan yang tepat, tetapi itu berarti label tombol harus tetap tidak ambigu di antara platform.

Bantuan prompt adalah kesalahan yang lebih besar. iOS mendukung Alert.prompt untuk masukan teks ringan. Android tidak. Jika suatu alur bergantung pada memasukkan kata sandi, mengubah nama item, atau menangkap catatan singkat di dalam peringatan itu sendiri, maka alur itu hanya tersedia di iOS kecuali Anda membuat jalur terpisah.

Pilih periksa platform awal daripada menganggap API berada di garis lurus.

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

Alternatif Android yang kurang nyaman. Namun, itu masih pilihan yang lebih aman. Di produksi, redirect ke layar dedikasi atau modal yang dikontrol lebih mudah untuk diuji, lebih mudah untuk disesuaikan, dan lebih mudah untuk membuat aksesibel daripada prompt palsu yang dibangun di sekitar perilaku yang tidak didukung.

Perlu rencana sendiri untuk dukungan web

Dokumentasi resmi Alert API React Native menyebutkan dukungan untuk iOS dan Android di Dokumentasi Referensi Alert React NativeJika aplikasi Anda juga berjalan di React Native Web atau Expo Web, meninggalkan peringatan tidak diwrap membuat gagal sepenuhnya untuk jalur interaksi pada build web (Diskusi masalah React Native Web tentang dukungan peringatan).

Masalah itu bukanlah kasus pinggiran. Banyak tim menemukannya terlambat karena QA mobile melewati terlebih dahulu, sementara penutupan browser datang kemudian.

Tangani peringatan native sebagai mobile-only kecuali Anda menambahkan wrapper.

Juga membantu jika tim Anda membandingkan perdagangan waktu eksekusi hybrid di antara platform, terutama dalam React Native vs. arsitektur Capacitor.

Polifill Web Sederhana

Untuk banyak aplikasi, solusi yang paling berfungsi pertama kali adalah abstraksi kecil di sekitar pemisahan platform:

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

Pola ini menyelesaikan celah dukungan segera, tetapi memiliki batasan. window.confirm gives you almost no control over styling, focus behavior, or analytics hooks. It is a reasonable safety net for simple confirmations, not a final answer for flows that need accessibility review, alert queueing, or consistent behavior across mobile and web.

Kapan Menggunakan Modal Tidak Standar Daripada Peringatan

Dialog Pop-up Asli React Native kuat karena terbatas. Batasan yang sama itulah mengapa mereka menjadi alat yang tidak tepat dengan cepat.

If you need Kontrol tata letak, ikon, bidang formulir, jarak yang disesuaikan, pengaturan waktu animasi, atau konsistensi visual lintas platformHentikanlah perlawananmu terhadap API. Gunakan modal kustom.

Gembok perunggu yang duduk di samping mekanisme gigi jam logam kompleks di atas permukaan putih.

Peringatan native memiliki batasan yang tidak dapat Anda code

Anda tidak dapat membuat Alert.alert() menggunakan desain sistem Anda. Itu adalah desain. React Native menyerahkan rendering ke sistem operasi, sehingga Anda mewarisi penampilan native dan keterbatasan native.

Itu baik ketika Anda ingin konfirmasi cepat. Itu buruk ketika produk meminta salah satu hal berikut:

  • Konfirmasi Dialog yang Dibuat oleh Pengembang with logo, helper text, and custom hierarchy
  • di dalam modal di dalam modal
  • Aliran Destructif yang Lebih Kaya Dengan pengakuan centang kotak
  • Permintaan tinjauan atau permintaan ulasan Dengan bintang, ilustrasi, dan tombol kustom

Setelah persyaratan-persyaratan tersebut muncul, peringatan asli menjadi akhir yang mati.

A filter keputusan sederhana

Pakai Peringatan React Native Pakai ketika dialog adalah:

Pakai peringatan asli Pakai modal kustom
Pesan singkat Isi konten yang kaya atau terstruktur
Satu hingga tiga aksi dasar Formulir atau komponen terintegrasi
Penampilan asli platform diterima Konsistensi visual penting di semua platform
Anda ingin implementasi yang paling cepat Anda membutuhkan kontrol tata letak dan animasi

Modal kustom juga membantu ketika build mobile dan web Anda memerlukan perilaku yang sama. Sebaliknya dari kasus khusus setiap platform selamanya, Anda dapat mengentralisasi satu komponen dialog dan menjaga model interaksi yang konsisten.

Saat Anda mulai berharap Alert memiliki ‘hanya satu lagi properti,’ Anda mungkin membutuhkan modal.

Kandidat yang baik untuk perpustakaan modal kustom

Fitur yang Terintegrasi Modal Komponen bawaan bekerja, tetapi banyak tim memilih wrapper seperti react-native-modal Karena itu menambahkan kontrol praktis di sekitar visibilitas, perilaku latar belakang, dan animasi.

That’s especially useful for flows that resemble action sheets, bottom drawers, or composed confirmation panels. If your design sits closer to a menu than a strict native alert, related UI patterns such as an Boks Dialog Ioni Sering memberikan model mental yang lebih baik daripada mencoba memanipulasi Alert.

One warning matters here. Don’t replace every alert with a custom modal just because it looks nicer. Native alerts still win for speed, familiarity, and low implementation risk. Use a modal because the interaction requires it, not because the design team dislikes system chrome.

Polanya untuk Notifikasi yang Handal di React Native

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 Alert.alert Tidak diimplementasikan di sana. Masalah biasanya berasal dari arsitektur, bukan dari panggilan API itu sendiri.

Sentralisasi peringatan daripada memanggilnya di mana-mana

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.

Apa itu layanan peringatan global? Gunakan Redux, Zustand, atau React Context. Pilihan penyimpanan tidak terlalu penting daripada kontrak. Permintaan peringatan masuk dalam antrian, satu dialog aktif pada satu waktu, dan web dapat berganti ke fallback berbasis modal di balik interface yang sama.

Pengembang yang membahas pola abstraksi peringatan telah menunjukkan kegagalan yang sama secara berulang: aplikasi yang tidak terstruktur dengan baik seringkali berakhir dengan dialog yang berlapis yang menangkap pengguna atau menyembunyikan aksi yang mereka butuhkan, kadang-kadang mempengaruhi sekitar 30-40% sebagian implementasi yang dibahas dalam praktek (Diskusi Implementasi tentang Abstraksi Peringatan dan Pemuatan Dialog was noted earlier in the article, so do not repeat that link here). The practical fix is simple. Wrap the API once, queue requests globally, and make the renderer responsible for exactly one visible alert.

Berikut adalah bentuk padat gaya 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;
};

The UI layer subscribes to the first queue item and renders exactly one dialog. When the user dismisses it, the service removes that item and reveals the next.

Aksesibilitas merupakan bagian dari implementasi

Penggabungan Gluestack dari pilihan peringatan React Native mencatat bahwa implementasi modal kustom seringkali mengganggu urutan membaca yang diharapkan dari

Perbandingan Gluestack tentang pilihan notifikasi React Native mencatat bahwa implementasi modal kustom sering kali mengganggu urutan membaca yang diharapkan , dengan kegagalan yang dilaporkan sekitarSebagian besar implementasi yang dibahas dalam praktek ( 60% di daerah tersebut dalam benchmark mereka mengenai pengelolaan aksesibilitas (bandingan Gluestack’s React Native Alert vs Modal aksesibilitas). Masalah tersebut sangat penting karena pengguna pembaca layar bergantung pada struktur yang dapat diprediksi untuk memahami dialog sebelum mengambil tindakan.

For custom alert UI, simpanlah daftar checklist ini singkat dan ketat:

  • Pindahkan fokus ke dialog ketika itu dibuka.
  • Kembalikan fokus ke trigger setelah ditutup.
  • Tetapkan urutan membaca utuh: judul, pesan, kemudian aksi.
  • Berikan jalur batalkan yang jelas, terutama untuk alur yang menghancurkan.
  • Label aksi dengan tepat. ‘Hapus’ lebih baik daripada ‘OK’ ketika konsekuensi penting.

Bug aksesibilitas dalam aliran peringatan seringkali terlewatkan selama QA normal. Pengguna papan tik dan pengguna pembaca layar menemukannya terlebih dahulu.

Uji trigger, bukan dialog platform

Unit test harus memastikan bahwa code Anda meminta peringatan yang Anda harapkan. Mereka tidak boleh bergantung pada runtime dialog native.

Polanya Jest biasanya seperti ini:

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

Hal ini menjaga tes fokus pada logika bisnis dan mencegah hentian yang disebabkan oleh perilaku dialog di luar lingkungan tes. Ini juga mendorong tim ke wrapper API, yang berguna ketika web dan Android memaksa fallback kustom karena batasan prompt.

Pengawasan sisi klien membantu juga. Tim yang sudah mengikuti gagal interaksi dengan Sentry di aplikasi React Native biasanya menangkap lebih banyak masalah peringatan ketika jalur code yang memicu peringatan diapit dengan penanganan kesalahan eksplisit dan log dengan cukup konteks untuk mereproduksi aliran.

Batasan produksi yang stabil

Untuk aplikasi yang sudah melewati tahap prototipe, gunakan set kecil aturan:

  1. Bungkus Alert.alert dalam bantuan jadi logika fallback web hidup di satu tempat.
  2. Antrian permintaan dialog global jadi hanya satu peringatan yang terlihat pada satu waktu.
  3. Tangani dukungan Android prompt sebagai hilang dan rencanakan fallback modal daripada cabang terlambat.
  4. Perlukan aksi batal untuk operasi merusak atau tidak dapat dikembalikan.
  5. Mimik peringatan dalam tes dan asert label, panggilan balik, dan urutan.
  6. Pakai modal kustom hanya ketika diperlukan, seperti kesetaraan web, input prompt, atau konten yang lebih kaya.

Ini menjaga peringatan native cepat di mana mereka berfungsi baik dan menghindari melukis kodebase ke sudut ketika perbedaan platform muncul kemudian.

Update langsung untuk aplikasi Capacitor

Ketika bug layer web masih aktif, kirimkan perbaikan melalui Capgo daripada menunggu hari-hari untuk persetujuan toko aplikasi. Pengguna mendapatkan update di latar belakang sementara perubahan native tetap dalam jalur review normal.

Bantuan manusia dari Martin

Mulai Sekarang

Terbaru dari Blog Kami

Capgo memberikan Anda wawasan terbaik yang Anda butuhkan untuk membuat aplikasi mobile profesional yang sebenarnya.