Lompat ke Konten Utama
Mobile Guides

Master React Native Alert: API Guide & Best Practices

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

Master React Native Alert: API Guide & Best Practices

Anda men-trigger Alert.alert() di React Native, tes di iPhone dan Android, dan merasa sudah selesai. Lalu seseorang membuka build web dan tidak ada yang muncul. Atau Android mengabaikan aliran konfirmasi yang Anda gunakan di iOS. Atau dua bagian aplikasi memicu peringatan secara bersamaan dan pengguna terjebak dalam tumpukan dialog yang berantakan.

Itu adalah bentuk dari React Native Alert 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-sudut kasar dapat diprediksi jika Anda tahu di mana mereka berada.

Daftar Isi

Menggunakan Peringatan.alert untuk Menampilkan Pesan Sederhana

Untuk notifikasi UI dasar, React Native Alert masih merupakan alat yang paling cepat di kotak. Anda mengimport Alert, panggil Alert.alert(), dan platform menampilkan dialog asli. Tidak ada dependensi tambahan, tidak ada modul modal kustom, tidak ada pekerjaan gaya.

The simplest version 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 yang 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.

Apa yang panggilan dasar memberikan Anda

A plain Alert.alert(title, message) berguna karena tetap asli. Sistem operasi mengelola presentasi visual, peran tombol, dan pola interaksi standar. Untuk banyak tim, itu adalah perdagangan yang tepat.

Beberapa aturan praktis membantu menjaga itu berguna:

  • Pakai judul langsung“Gagal mengunggah” lebih jelas daripada “Peringatan”.
  • Jaga pesan singkat.Alerts adalah untuk konteks segera, bukan penjelasan panjang.
  • Simpan alert untuk informasi penghalang.Jika pengguna dapat melanjutkan tanpa gangguan, seringkali toast lebih baik.

Jaga alert kecil dan tegas. Jika pengguna perlu membaca paragraf, dialog mungkin tidak UI yang tepat.

Di mana tim salah gunakan

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

Kesalahan lainnya adalah mengkaitkan alert terlalu erat dengan komponen internal. Sebuah handler tombol kecil baik-baik saja pada awalnya, tetapi ketika aliran mengalir ke beberapa layar dan aksi asinkron, panggilan alert yang terpisah di mana-mana sulit untuk dipahami. Itulah mengapa tim sering mengstandardisasi pola UX sekitar awal, sama seperti mereka mengstandardisasi perilaku layar splash di aplikasi React Native Penggunaan yang baik untuk alert sederhana.

Skenario

Penggunaan yang baik untuk alert sederhana adalah Mengapa Alert Berfungsi
Simpan konfirmasi setelah perubahan pengaturan kritis Pengguna memerlukan pengakuan eksplisit
Peringatan waktu sesi Pesan ini sangat penting dan berorientasi pada tindakan
Peringatan fitur tidak didukung Aplikasi perlu berhenti dan menjelaskan

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

Mengelola Masukan Pengguna dengan Tombol Konfirmasi

Penggunaan Alert nyata sebagian besar bukanlah informatif. Itu tentang keputusan. Hapus draft, diskusikan perubahan, keluar, ulangi permintaan gagal. Di sana buttons array sangat penting.

Berikut adalah contoh 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.

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

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

Pemilihan label tombol yang mengurangi kesalahan

API memungkinkan Anda menulis 'OK' dan melanjutkan. Itu biasanya tidak cukup. Label harus menjelaskan hasil, terutama untuk aksi destructive.

Bandingkan dua set berikut:

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

Versi kedua menghilangkan ketidakjelasan. Hal ini sangat penting dalam aliran yang menghancurkan, dan hal ini bahkan lebih penting ketika peringatan muncul setelah terjadi kesalahan atau operasi async. Teks tombol harus menjawab, “Apa yang terjadi jika saya mengetuk tombol ini?”

Jika aliran Anda mengumpulkan teks dari pengguna di tempat lain, pola teman yang bersih adalah menggabungkan peringatan dengan input formulir eksplisit seperti implementasi TextInput React Native yang khusus bukannya mencoba untuk memperluas dialog secara berlebihan. Apa yang sebenarnya berarti gaya tombol

What button styles actually mean

Field ini bersifat semantik, bukan dekoratif. Gunakan untuk menyampaikan niat. style Gaya

Kapan menggunakan Catatan Ketika Anda mengumpulkan teks dari pengguna di tempat lain, pola teman yang bersih adalah menggabungkan peringatan dengan input formulir eksplisit seperti implementasi TextInput React Native yang khusus
default Aksi normal Bagus untuk pilihan netral
cancel Keluar atau keluar dari Penting untuk penghapusan aman
destructive Tindakan tidak dapat dikembalikan Ditandai secara visual di iOS

Catatan Gluestack tentang benchmark teknis menunjukkan bahwa konvensi platform sangat penting di sini. iOS menempatkan tombol batal pada sisi kiri dan konfirmasi pada sisi kanan, sementara Android mengubahnya. Melanggar konvensi-konvensi tersebut menyebabkan indikator kebingungan pengguna meningkat dengan 25% di pasar global, dan 45% di aplikasi produksi yang memiliki jalur kritikal tanpa jalur pembatalan atau keluar yang wajib, yang meningkatkan aksi tidak dapat dikembalikan dan volume dukungan. Analisis yang sama juga menyebutkan bahwa implementasi peringatan kustom sering gagal dalam membaca urutan untuk teknologi bantu. Petunjuk Peringatan Gluestack.

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

Untuk walkthrough visual yang lebih baik 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. Peringatan harus tetap prediktif.

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 platformnya tidak.

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

iOS dan Android tidak sepenuhnya sesuai.

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 adalah tawaran yang tepat, tetapi itu berarti label tombol harus tetap tidak ambigu di antara platform.

Support 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.

Pergunakan periksa platform awal daripada berpura-pura bahwa API sesuai.

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, arahan ke layar dedikasi atau modal yang dikendalikan lebih mudah untuk diuji, lebih mudah untuk disesuaikan, dan lebih mudah untuk membuat aksesibel daripada peringatan palsu yang dibangun di sekitar perilaku yang tidak didukung.

Web membutuhkan rencana sendiri.

React Native’s official Alert API documentation lists support for iOS and Android in the . Jika aplikasi Anda juga berjalan di React Native Web atau Expo Web, meninggalkan peringatan tidak terbungkus menciptakan kegagalan total untuk jalur interaksi di build browser ('Diskusi masalah support alert di React Native WebTidak itu kasus pinggir. Tim sering menemukannya terlambat karena QA mobile melewati terlebih dahulu, sementara penutupan browser datang kemudian.).

iOS dan Android tidak sepenuhnya sesuai.

Tangani Alert asli native seperti hanya untuk perangkat mobile kecuali Anda menambahkan wrapper.

Wrapper tersebut juga membantu jika tim Anda sedang membandingkan kelebihan runtime hybrid di antara platform, terutama dalam sebuah Perbandingan arsitektur React Native vs. Capacitor.

Gaya pola web yang sederhana

Untuk banyak aplikasi, solusi kerja yang paling sederhana 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 ini menyelesaikan celah dukungan yang segera, tetapi memiliki batasan. window.confirm Memberikan Anda hampir tidak ada kontrol atas gaya, perilaku fokus, atau hook analisis. Ini adalah jaringan keselamatan yang wajar untuk konfirmasi sederhana, bukan jawaban akhir untuk alur yang memerlukan tinjauan aksesibilitas, antrian peringatan, atau perilaku konsisten di antara mobile dan web.

Kapan Menggunakan Modal Kustom Daripada Peringatan

Peringatan dialog native kuat karena mereka terbatas. Batasan yang sama adalah mengapa mereka tidak lagi menjadi alat yang tepat dengan cepat.

Jika Anda memerlukan branding, kontrol tata letak, ikon, bidang formulir, jarak kustom, waktu animasi, atau konsistensi visual di antara platform, berhenti melawan API. Gunakan modal kustom.

A padlock tembaga duduk di samping sebuah mekanisme gear logam kompleks pada permukaan putih.

Tidak ada batasan native yang bisa Anda code.

Tidak ada cara untuk membuat Alert.alert() terlihat seperti sistem desain Anda. Itu adalah desain. React Native mengirimkan rendering ke sistem operasi, sehingga Anda mewarisi penampilan native dan konstrain native.

Itu bagus ketika Anda ingin konfirmasi cepat. Itu buruk ketika produk meminta salah satu hal 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 checkbox
  • Permintaan rating atau permintaan ulasan __CAPGO_KEEP_0__
  • __CAPGO_KEEP_0__ bersama bintang, ilustrasi, dan tombol kustom

Ketika persyaratan tersebut muncul, peringatan asli menjadi ujung tanduk.

Filter keputusan sederhana

Gunakan Alert React Native ketika dialog adalah:

Gunakan Pemberitahuan Asli Gunakan modal kustom
Pesan singkat Isi yang kaya atau struktur
Aksi dasar satu hingga tiga Formulir atau komponen terintegrasi
Penampilan native platform diterima Mengenai konsistensi visual di antara platform
Anda ingin implementasi yang paling cepat Anda membutuhkan kontrol layout 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

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

Terutama 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 Ionic seringnya memberikan model mental yang lebih baik daripada mencoba memanipulasi Alert menjadi bentuk yang diinginkan.

Peringatan satu hal yang perlu diingat di sini. Jangan mengganti setiap peringatan dengan modal kustom hanya karena tampilannya lebih menarik. Peringatan asli masih menang dalam hal kecepatan, keterbiasaan, dan risiko implementasi yang rendah. Gunakan modal karena interaksi memerlukan, bukan karena tim desain tidak menyukai chrome sistem.

Polanya Produksi untuk Peringatan React Native yang Dapat Dipercaya

Permintaan hapus gagal, handler ulang gagal, dan pengecekan sesi-expired berjalan pada saat yang sama. Tanpa strategi peringatan yang jelas, pengguna dapat terkena dengan dialog yang berlapis, fokus yang hilang, atau tidak berfungsi pada web karena Alert.alert tidak diimplementasikan di sana. Bug biasanya berasal dari arsitektur, bukan dari API call itu sendiri.

Sentralkan peringatan daripada memanggilnya di mana-mana

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

Jasa peringatan global memecahkan masalah itu. 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 menukar ke fallback berbasis modal di balik interface yang sama.

Para pengembang yang membahas pola abstraksi peringatan telah menunjukkan mode gagal yang sama secara berulang-ulang: aplikasi yang tidak terstruktur dengan baik sering kali berakhir dengan dialog yang berlapis-lapis yang menangkap pengguna atau menyembunyikan aksi yang mereka butuhkan, kadang-kadang mempengaruhi sekitar 30-40% sekitarimplementasi yang dibahas dalam praktek ( 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.

telah dicatat sebelumnya dalam artikel ini, jadi jangan ulangi tautan ini di sini). Solusi praktisnya sederhana. Tutup __CAPGO_KEEP_0__ sekali, antrikan permintaan global, dan buat renderer bertanggung jawab atas satu peringatan yang terlihat secara tepat.

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

Berikut adalah bentuk Zustand-style yang padat:

Lapisan UI berlangganan item antrian pertama dan menampilkan dialog yang tepat. Ketika pengguna menutupnya, layanan menghapus item tersebut dan menampilkan yang berikutnya.

Kemampuan aksesibilitas merupakan bagian dari implementasi

Peringatan asli memberikan Anda default yang memadai pada iOS dan Android. Saat Anda memperkenalkan fallback kustom untuk web, konten yang lebih kaya, atau pengganti prompt Android, Anda mengambil alih perilaku yang sistem dialog tangani secara gratis. Penggabungan Gluestack dari pilihan peringatan React Native mencatat bahwa implementasi modal kustom sering kali menghancurkan urutan membaca yang diharapkan darititle → pesan → tombol 60% , dengan kegagalan yang dilaporkan di sekitar

Untuk antarmuka peringatan kustom, jaga daftar ini singkat dan ditegakkan:

  • Pindahkan fokus ke dialog ketika itu dibuka.
  • Kembalikan fokus ke trigger setelah ditutup.
  • Tahan urutan membaca utuh: judul, pesan, kemudian aksi.
  • Berikan jalur batalkan yang jelas, terutama untuk aliran hancur.
  • Label aksi dengan tepat. “Hapus” lebih baik daripada “OK” ketika konsekuensi penting.

Bug aksesibilitas dalam aliran peringatan mudah terlewatkan 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 uji fokus pada logika bisnis dan mencegah hentian yang disebabkan oleh perilaku dialog di luar lingkungan uji. Ini juga mendorong tim ke wrapper API, yang berguna ketika kekurangan prompt web dan Android memaksa fallback kustom.

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 terkait ketika jalur code yang memicu peringatan diapit dengan penanganan kesalahan eksplisit dan dicetak dengan cukup konteks untuk mengulangi aliran.

Dasar produksi yang berdiri

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

  1. Terapkan Alert.alert di helper sehingga logika fallback web hidup di satu tempat.
  2. Diajukan permintaan dialog secara global Hanya satu peringatan yang terlihat pada satu waktu.
  3. Tangani dukungan prompt Android sebagai hilang dan rencanakan fallback modal daripada bercabang terlambat.
  4. Diperlukan aksi pembatalan untuk operasi merusak atau tidak dapat dikembalikan.
  5. Menggunakan simulasi peringatan dalam tes dan asertikan label, panggilan balik, dan urutan.
  6. Hanya gunakan modal kustom 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.

Pembaruan langsung untuk Capacitor aplikasi

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.

Jika bug layer web masih aktif, kirimkan perbaikan melalui __CAPGO_KEEP_0__ daripada menunggu hari-hari untuk mendapatkan persetujuan toko aplikasi. Pengguna mendapatkan pembaruan di latar belakang sementara perubahan native tetap dalam jalur tinjauan normal.

Konteks: Halaman/area: Situs pemasaran Capgo. Peran: Kalimat copy situs web atau deskripsi meta. Dilihat di: komponen GetStarted.astro. Simpan istilah produk/merek dan istilah pengembang Capgo secara tepat. Pesan kunci `instant_updates_for_capacitor_apps_description` (Pembaruan Langsung Untuk Aplikasi Capacitor Deskripsi).

Dukungan manusia dari Martin

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