Lompat ke Konten Utama
Mobile Tutorial

Master React Native Alert: API Guide & Best Practices

Belajar Menggunakan Alert React Native API. Buatlah peringatan, konfirmasi, dan atasi perbedaan platform dengan praktik terbaik untuk aksesibilitas.

Belajar Alert React Native: API Panduan & Praktik Terbaik

Kamu mengaktifkan Alert.alert() di React Native, tes di iPhone dan Android, dan terasa sudah selesai. Kemudian seseorang membuka build web dan tidak ada yang muncul. Atau Android mengabaikan aliran konfirmasi yang kamu gunakan di iOS. Atau dua bagian aplikasi memicu peringatan secara bersamaan dan pengguna terjebak dalam stack dialog yang berantakan.

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

Tabel Konten

Menggunakan Pesan Sederhana dengan Alert.alert

Untuk notifikasi UI dasar, Peringatan React Native masih merupakan alat tercepat di box. Anda import Alert, panggil Alert.alert(), dan platform menampilkan dialog native. Tidak ada dependensi tambahan, tidak ada keadaan modal kustom, tidak ada pekerjaan gaya.

Versi paling sederhana hanya membutuhkan 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 alur, jadi harus membawa informasi yang pengguna butuh sekarang, bukan kebisingan status kecil.

Apa yang Anda dapatkan dari panggilan dasar

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

Beberapa aturan praktis membantu menjaga itu berguna:

  • Pakai judul langsung. “Pengunggahan gagal” lebih jelas daripada “Peringatan”.
  • Tetapkan pesan singkat. Peringatan adalah untuk konteks sekarang, bukan penjelasan panjang.
  • Pakai peringatan untuk informasi menggangguJika 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 UI yang tepat.

Dimana tim-tim salah menggunakan itu

Kesalahan paling umum adalah menggunakan peringatan sebagai sistem pesan umum. Jika setiap aksi sukses menampilkan dialog penghalang, aplikasi mulai terasa berat cepat.

Another mistake is coupling alerts too tightly to component internals. A tiny button handler is fine at first, but once flows span multiple screens and async actions, alert calls scattered everywhere get hard to reason about. That’s one reason teams often standardize surrounding UX patterns early, the same way they standardize Tindakan layar splash di aplikasi React Native.

Penggunaan yang baik untuk peringatan sederhana

Scenario Mengapa Alert Berfungsi
Konfirmasi Simpan Setelah Perubahan Pengaturan Kritis Konfirmasi simpan setelah perubahan pengaturan kritis
Pengguna memerlukan pengakuan eksplisit Pesan ini sangat mendesak dan berorientasi pada tindakan
Pesan fitur tidak didukung Aplikasi perlu berhenti dan menjelaskan

Jika Anda perlu meminta pengguna memilih antara jalur, langkah selanjutnya adalah buttons Array. Di sana Alert.alert() menjadi lebih dari sebuah kotak pesan sederhana.

Mengelola Masukan Pengguna dengan Tombol Konfirmasi

Penggunaan sebenarnya alert yang nyata bukanlah informatif. Itu tentang keputusan. Hapus draft, diskar changes, keluar, ulangi permintaan yang gagal. Itu di mana. buttons array berperan.

Berikut adalah dialog konfirmasi 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.

Setiap tombol adalah objek. Dalam prakteknya, Anda akan menggunakan tiga properti paling sering:

  • text adalah label yang ditampilkan kepada pengguna.
  • onPress berjalan ketika tombol tersebut ditekan.
  • style berkomunikasi arti, terutama di iOS.

Pemilihan label tombol yang 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 ketidakjelasan. Hal itu penting dalam aliran destructive, dan hal itu lebih penting lagi ketika peringatan muncul setelah kesalahan atau operasi async. Tekst tombol harus menjawab, “Apa yang terjadi jika saya menekan tombol ini?”

Jika aliran Anda mengumpulkan teks dari pengguna di tempat lain, pola teman yang jelas adalah menggabungkan peringatan dengan input formulir eksplisit seperti input formulir dedikasi seperti Implementasi TextInput React Native Daripada mencoba memperluas dialog secara berlebihan.

Apakah gaya tombol sebenarnya berarti

Bagian style bidang ini bersifat semantik, bukan dekoratif. Gunakan untuk menyampaikan niat.

Gaya Kapan menggunakan Catatan
default Aksi normal Baik untuk pilihan netral
cancel Keluar atau keluar Penting untuk pengeluaran aman
destructive Aksi tidak dapat dibatalkan Digarisbawahi secara visual pada iOS

Catatan Gluestack menunjukkan bahwa konvensi platform sangat penting di sini. iOS menempatkan tombol batal pada sisi kiri dan konfirmasi pada sisi kanan, sementara Android melakukan hal sebaliknya. Melanggar konvensi tersebut menyebabkan indeks kebingungan pengguna meningkat dengan 25% di pasar global, dan 45% persentase pesan peringatan kritis di aplikasi produksi yang mengabaikan jalur keluar wajib meningkatkan aksi tidak dapat dibatalkan dan volume dukungan. Analisis yang sama juga menunjukkan bahwa implementasi pesan peringatan kustom sering gagal dalam membaca urutan untuk teknologi bantu. Lihat panduan Pesan Peringatan Gluestack.

Aturan praktis: Aksi peringatan destruktif harus selalu memiliki cara keluar yang eksplisit.

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

Aktivitas konfirmasi yang lebih aman

Jika aksi yang 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. Peringatan harus tetap dapat diprediksi.

Bug produksi yang umum terlihat seperti ini. Sama-sama Alert.alert() Panggilan yang sama bekerja di iOS, bekerja di Android, kemudian gagal berfungsi setelah tim mengirimkan build web. API terlihat seragam di code, tetapi platform tidak.

Tabel perbandingan yang menyoroti perbedaan spesifik platform antara iOS dan Android dialog peringatan di pengembangan React Native.

iOS dan Android tidak cocok secara sempurna

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

Dukungan prompt adalah kesesuaian 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 membangun jalur terpisah.

Periksa platform awal daripada berpura-pura bahwa API-nya berada di garis.

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 itu kurang nyaman. Namun, itu masih pilihan yang lebih aman. Pada produksi, arahan ke layar atau modal yang dikendalikan lebih mudah untuk diuji, lebih mudah untuk disesuaikan, dan lebih mudah untuk dibuat aksesibel daripada prompt palsu yang dibangun di sekitar perilaku yang tidak didukung.

Diperlukan rencana sendiri untuk mendukung web.

Dokumentasi resmi Alert React Native API menyebutkan dukungan untuk iOS dan Android di dalamnya. Referensi Alert React Native. Jika aplikasi Anda juga berjalan di React Native Web atau Expo Web, meninggalkan peringatan tidak terbungkus menciptakan kegagalan total untuk jalur interaksi tersebut pada build web ('Pembahasan masalah dukungan web pada React Native).

Masalah itu bukan kasus pinggir. Tim sering menemukannya terlambat karena QA mobile melewati terlebih dahulu, sementara penutupan browser datang kemudian.

Tangani Alert native sebagai hanya mobile-kecuali Anda menambahkan pembungkus.

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

Periksa platform awal daripada berpura-pura API-nya berbaris.

Untuk banyak aplikasi, solusi yang paling berfungsi 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 },
  ]);
}

Polanya menyelesaikan celah dukungan segera, tetapi memiliki batasan. window.confirm Memberikan Anda kendali hampir tidak ada atas gaya, perilaku fokus, atau hook analitik. Ini adalah jaringan keamanan yang wajar untuk konfirmasi sederhana, bukan jawaban akhir untuk alur yang memerlukan tinjauan aksesibilitas, antrian peringatan, atau perilaku konsisten di mobile dan web.

Kapan Menggunakan Modal Custom Daripada Notifikasi Peringatan

Peringatan dialog native kuat karena terbatas. Batasan yang sama adalah mengapa mereka berhenti menjadi alat yang tepat secara cepat.

If you need branding, kontrol tata letak, ikon, bidang formulir, jarak kosong kustom, waktu animasi, atau konsistensi visual lintas platform, berhenti berjuang dengan API. Gunakan modal kustom.

Padlock logam yang duduk di samping mekanisme jam logam kompleks di atas permukaan putih.

Peringatan native membatasi Anda tidak dapat code

Anda tidak dapat membuat Alert.alert() terlihat seperti sistem desain Anda. Itu oleh desain. React Native menyerahkan rendering ke sistem operasi, sehingga Anda mewarisi penampilan native dan konstrain native.

Baik-baik saja ketika Anda ingin konfirmasi cepat. Tidak baik ketika produk meminta salah satu dari ini:

  • Konfirmasi dialog yang ditandai dengan logo, teks bantuan, dan hierarki yang dapat disesuaikan
  • Form multi-field di dalam modal
  • Alur penghapusan yang lebih kaya dengan pengakuan centang
  • Permintaan penilaian atau permintaan ulasan dengan bintang, ilustrasi, dan tombol yang dapat disesuaikan

Ketika persyaratan-persyaratan tersebut muncul, peringatan native menjadi akhir yang mati.

Filter keputusan sederhana

Pilih Peringatan React Native ketika dialog adalah:

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

Apa yang membuat dialog modal kustom berguna adalah ketika aplikasi mobile dan web Anda memerlukan perilaku yang sama. Sebaliknya dari kasus spesial untuk setiap platform, Anda dapat mengintegrasikan satu komponen dialog dan menjaga model interaksi yang konsisten.

Ketika Anda mulai berharap Alert memiliki 'hanya satu lagi properti,' kemungkinan besar Anda memerlukan dialog modal.

Kandidat yang baik untuk library dialog modal kustom adalah

Komponen bawaan Modal berfungsi, tetapi banyak tim memilih wrapper seperti react-native-modal karena itu menambahkan kontrol yang praktis seputar visibilitas, perilaku latar belakang, dan animasi.

Hal ini sangat berguna untuk alur yang menyerupai kartu aksi, drawer bawah, atau panel konfirmasi yang terdiri dari beberapa bagian. Jika desain Anda lebih dekat dengan menu daripada peringatan native yang ketat, pola UI terkait seperti Sheet Aksi 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 Produktif untuk Notifikasi React Native yang Terpercaya

delete request gagal, handler ulang memicu, dan periksa sesi yang berakhir pada waktu yang sama. Tanpa strategi peringatan yang jelas, pengguna dapat terkena dialog yang berlapis, fokus yang hilang, atau tidak berfungsi pada web karena Alert.alert tidak diimplementasikan di sana. Bug-bug biasanya berasal dari arsitektur, bukan dari panggilan API itu sendiri.

Alert sentralisasi bukan panggilan mereka di mana-mana.

Langsung Alert.alert(...) panggilan-panggilan yang terpisah di layar tidak dapat bertahan dalam kodebase yang lebih besar. Komponen satu menangani gagal API, komponen lain meminta konfirmasi navigasi, dan komponen ketiga memberi peringatan tentang kadaluarsa autentikasi. Jika kejadian-kejadian itu terjadi bersamaan, Anda memerlukan logika pengaturan urutan, deduplikasi, dan fallback platform di satu tempat.

Jasa peringatan global menyelesaikan masalah itu. Gunakan Redux, Zustand, atau React Context. Pilihan penyimpanan tidak terlalu penting daripada kontrak. Permintaan peringatan masuk dalam antrian, dialog yang aktif hanya satu kali, dan web dapat berganti ke fallback berbasis modal di balik interface yang sama.

Pengembang yang membahas pola abstraksi peringatan telah menunjukkan kembali kegagalan mode yang sama: aplikasi yang tidak terstruktur dengan baik sering kali mengalami dialog yang berlapis yang menangkap pengguna atau menyembunyikan aksi yang perlu diambil, kadang-kadang mempengaruhi sekitar 30-40% persentase implementasi yang dibahas dalam praktik (diskusi implementasi tentang abstraksi peringatan dan stacking dialog perlu diingat sebelumnya dalam artikel ini, jadi jangan ulangi tautan itu di sini). Solusi praktisnya sederhana. Tutup API sekali, antriankan permintaan global, dan buat renderer bertanggung jawab atas peringatan yang hanya satu yang terlihat.

Ini adalah bentuk Zustand yang padat:

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

Lapisan UI berlangganan item antrian pertama dan menampilkan dialog yang hanya satu. Ketika pengguna menutupnya, layanan menghapus item itu dan menampilkan yang berikut.

Aksesibilitas adalah bagian dari implementasi

Peringatan asli memberikan Anda default yang memadai pada iOS dan Android. Saat Anda memperkenalkan pengganti fallback kustom untuk web, konten yang lebih kaya, atau pengganti prompt Android, Anda mengendalikan perilaku yang sistem dialog tangani secara gratis.

Pengujian Gluestack dari opsi peringatan React Native mencatat bahwa implementasi modal kustom sering kali mengganggu urutan membaca yang diharapkan dari Judul → Pesan → Tombol, dengan kegagalan dilaporkan di 60% area tersebut dalam benchmark penanganan aksesibilitas mereka (Pengujian Aksesibilitas Gluestack React Native Alert vs Modal). Masalah tersebut penting karena pengguna pembaca layar bergantung pada struktur yang dapat diprediksi untuk memahami dialog sebelum bertindak.

Untuk UI peringatan kustom, simpanlah daftar checklist ini singkat dan ketat:

  • Pindahkan fokus ke dalam dialog ketika itu dibuka.
  • Pulihkan fokus ke trigger setelah penutupan.
  • Tetapkan urutan membaca utuh: judul, pesan, kemudian aksi.
  • Berikan jalur pembatalan yang jelas, terutama untuk aliran yang merusak.
  • Labelkan aksi dengan tepat. "Hapus" lebih baik daripada "OK" ketika konsekuensi penting.

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

Uji trigger, bukan dialog platform

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

Polanya Jest yang umum 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)
  );
});

Yang menjaga tes fokus pada logika bisnis dan mencegah henti 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 di sini 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 dicatat dengan cukup konteks untuk mereproduksi aliran.

Ambang produksi yang tahan lama

Untuk aplikasi di atas tahap prototipe, gunakan set minimal aturan:

  1. Terapkan Alert.alert di helper sehingga logika fallback web hidup di satu tempat.
  2. Antrian permintaan dialog global Hanya satu peringatan yang dapat dilihat sekaligus.
  3. Tangani dukungan prompt Android sebagai hilang dan rencanakan fallback modal daripada bercabang terlambat.
  4. Perlukan aksi batal untuk operasi merusak atau tidak dapat dibatalkan.
  5. Mimik peringatan dalam tes dan asert label, panggilan balik, dan urutan.
  6. Pilih modal kustom hanya ketika diperlukan.seperti kesetaraan web, input prompt, atau konten yang lebih kaya.

Ini menjaga peringatan asli cepat di mana mereka berfungsi baik dan menghindari menggambar kodebasis ke sudut sudut ketika perbedaan platform muncul kemudian.

Live updates untuk Capacitor aplikasi

Ketika bug layer web masih hidup, 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.

Terbaru dari Blog Kami

Capgo gives you the best insights you need to create a truly professional mobile app.