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
- Mengatasi Masukan Pengguna dengan Tombol Konfirmasi
- Menavigasi Kekacauan Platform dan Prompt Masukan
- Kapan Menggunakan Modal Tidak Baku Daripada Peringatan
- Polanya Produksi untuk Peringatan React Native yang Terpercaya
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>
);
}

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

Setiap tombol adalah objek. Dalam prakteknya, Anda akan menggunakan tiga properti paling sering:
textadalah label yang ditampilkan kepada pengguna.onPressberjalan ketika tombol tersebut ditekan.styleberkomunikasi 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.
Menavigasi Kekacauan Platform dan Prompt Input
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.

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.

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:
- Terapkan
Alert.alertdi helper sehingga logika fallback web hidup di satu tempat. - Antrian permintaan dialog global Hanya satu peringatan yang dapat dilihat sekaligus.
- Tangani dukungan prompt Android sebagai hilang dan rencanakan fallback modal daripada bercabang terlambat.
- Perlukan aksi batal untuk operasi merusak atau tidak dapat dibatalkan.
- Mimik peringatan dalam tes dan asert label, panggilan balik, dan urutan.
- 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.