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
- Menampilkan Pesan Sederhana dengan Alert.alert
- Mengatasi Input Pengguna dengan Tombol Konfirmasi
- Mengatasi Kekacauan Platform dan Prompt Input
- Kapan Menggunakan Modal Tidak Standar Daripada Peringatan
- Polosan pola produksi untuk notifikasi React Native yang dapat diandalkan
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>
);
}

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

Masing-masing tombol adalah sebuah objek. Dalam prakteknya, Anda akan menggunakan tiga properti yang paling sering:
textberjalan ketika tombol tersebut ditekan.onPressmenyampaikan makna, terutama pada iOS.styleMengilih 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.
Mengarungi Kecenderungan Platform dan Prompt Input
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.

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.

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:
- Bungkus
Alert.alertdalam bantuan jadi logika fallback web hidup di satu tempat. - Antrian permintaan dialog global jadi hanya satu peringatan yang terlihat pada satu waktu.
- Tangani dukungan Android prompt sebagai hilang dan rencanakan fallback modal daripada cabang terlambat.
- Perlukan aksi batal untuk operasi merusak atau tidak dapat dikembalikan.
- Mimik peringatan dalam tes dan asert label, panggilan balik, dan urutan.
- 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.