NexaDb (React)
Materi ini merangkum pola CRUD NexaDb pada React Native. Penyimpanan memakai
AsyncStorage sebagai backend dengan enkripsi field otomatis dan observer untuk update real-time.
Peran NexaDb
NexaDb adalah lapisan storage utama di dokumentasi React ini:
- Menyiapkan konfigurasi database dan store default.
- Menyediakan lifecycle: install, bind ref, dan reset.
- Menjadi pintu masuk operasi CRUD melalui ref storage yang aktif.
import { NexaDb } from "NexaJS";
const nexaDb = new NexaDb();
await nexaDb.install(); // siapkan store default
await nexaDb.Ref(); // bind NXUI.ref agar bisa dipakai langsung via NXUI.ref
// ... aplikasi berjalan ...
// opsional untuk reset
await nexaDb.uninstall();
Setelah await nexaDb.Ref(), instance ref tersimpan di NXUI.ref.
Ini diperlukan jika modul lain di aplikasi Anda mengakses storage lewat NXUI.ref secara langsung.
Format key penyimpanan
Semua data disimpan memakai pola key gabungan agar setiap record unik per database dan store. Dengan format ini, satu aplikasi bisa punya banyak store tanpa bentrok key.
// {dbName}_{storeName}_
MyAppDB_users_user_123CRUD Auto Mode (direkomendasikan)
Auto mode membuat store saat dipakai dan cocok untuk pengembangan cepat.
// Init + bind ref storage
const nexaDb = new NexaDb();
await nexaDb.install();
const db = await nexaDb.Ref();
// Set
await db.setAuto("users", {
id: "user_123",
name: "John Doe",
email: "john@example.com",
});
// Get
const user = await db.getAuto("users", "user_123");
// GetAll
const allUsers = await db.getAllAuto("users");
// Delete
await db.deleteAuto("users", "user_123");
Alur ringkas: validasi id → tambah timestamp → enkripsi field → simpan → notify observer.
CRUD Manual Mode
Manual mode dipakai jika Anda ingin kontrol struktur store lebih ketat sejak awal.
const nexaDb = new NexaDb();
await nexaDb.install();
const db = await nexaDb.Ref();
await db.set("users", { id: "user_123", name: "John Doe" });
const user = await db.get("users", "user_123");
const allUsers = await db.getAll("users");
await db.delete("users", "user_123");Manual mode cocok saat daftar store sudah final dan Anda ingin perilaku lebih predictable.
Alur SET / GET / GETALL / DELETE
SET : Input -> Validasi -> Encrypt -> Save -> Notify -> Return id
GET : Key -> Validasi -> Read -> Decrypt -> Return data/null
GETALL : Store -> Scan key -> MultiGet -> Decrypt loop -> Return { data: [...] }
DELETE : Key -> Validasi -> Remove -> Notify delete -> Return true/falseEnkripsi otomatis
- Saat
set/setAuto: field data di-obfuscate otomatis. - Saat
get/getAll: data di-decrypt otomatis sebelum dikembalikan. - Field metadata seperti
id,createdAt,updatedAtdipertahankan.
Praktiknya, Anda cukup kirim object biasa; proses encrypt/decrypt dikelola oleh layer storage.
Observer / watch
Tersedia pola observer untuk memantau perubahan store. Gunakan ini untuk refresh UI secara reaktif setelah operasi set/delete.
const nexaDb = new NexaDb();
await nexaDb.install();
const db = await nexaDb.Ref();
const unwatch = db.watch("users", (payload) => {
// payload.changeType: "update" | "delete" | "refresh"
// payload.data: data terbaru (sudah decrypt)
});
// saat tidak diperlukan lagi
unwatch();Error handling
- SET/DELETE: gagal validasi atau operasi -> melempar error/false sesuai method.
- GET/GETALL: jika key/data tidak ada ->
nullatau array kosong (graceful). - Jika
idkosong saat set, operasi harus dianggap invalid.
Manual vs Auto
- Auto: lebih fleksibel, store dibuat otomatis, cocok untuk iterasi cepat.
- Manual: lebih ketat/predictable, cocok saat skema store sudah final.
Praktik yang disarankan
- Selalu sertakan
idsaat menyimpan data. - Pilih satu mode (auto/manual) per fitur agar pola akses tetap konsisten.
- Gabungkan dengan
watch()untuk sinkronisasi UI real-time. - Untuk data banyak, prioritaskan
getAllAuto()lalu filter di memory sesuai kebutuhan UI. - Gunakan penamaan store per domain bisnis (mis.
users,posts,settings).
Contoh penggunaan NXUI.ref
Setelah await nexaDb.Ref(), Anda bisa memakai NXUI.ref langsung di halaman lain
tanpa membuat instance baru.
import { NXUI, NexaDb } from "NexaJS";
const nexaDb = new NexaDb();
await nexaDb.install();
await nexaDb.Ref(); // bind ke NXUI.ref
await NXUI.ref.setAuto("users", {
id: "user_001",
name: "Ian",
role: "admin",
});
const user = await NXUI.ref.getAuto("users", "user_001");
const users = await NXUI.ref.getAllAuto("users");
await NXUI.ref.deleteAuto("users", "user_001");const stopWatch = NXUI.ref.watch("users", async () => {
const rows = await NXUI.ref.getAllAuto("users");
setUsers(rows.data || []);
});
// cleanup saat unmount
stopWatch();