ctx.makeResource()

Membuat instance resource baru dan mengembalikannya, tidak akan menulis atau mengubah ctx.resource. Cocok untuk skenario yang membutuhkan beberapa resource independen atau penggunaan sementara.

Skenario Penggunaan

SkenarioDeskripsi
Multiple ResourceMemuat beberapa data source bersamaan (seperti list user + list order), setiap data dengan resource independen
Query SementaraQuery sekali pakai, dibuang setelah digunakan, tidak perlu mengikat ke ctx.resource
Data PendukungData utama menggunakan ctx.resource, data tambahan dibuat dengan makeResource

Jika hanya membutuhkan satu resource dan ingin mengikatnya ke ctx.resource, lebih cocok menggunakan ctx.initResource().

Definisi Tipe

makeResource<T = FlowResource>(
  resourceType: 'APIResource' | 'SingleRecordResource' | 'MultiRecordResource' | 'SQLResource'
): T;
ParameterTipeDeskripsi
resourceTypestringTipe resource: 'APIResource', 'SingleRecordResource', 'MultiRecordResource', 'SQLResource'

Return Value: instance resource yang baru dibuat.

Perbedaan dengan ctx.initResource()

MethodPerilaku
ctx.makeResource(type)Hanya membuat instance baru dan mengembalikannya, tidak menulis ke ctx.resource. Dapat dipanggil beberapa kali untuk mendapatkan beberapa resource independen
ctx.initResource(type)Jika ctx.resource tidak ada akan membuat dan mengikat; jika sudah ada langsung mengembalikan. Memastikan ctx.resource tersedia

Contoh

Resource Tunggal

const listRes = ctx.makeResource('MultiRecordResource');
listRes.setResourceName('users');
await listRes.refresh();
const users = listRes.getData();
// ctx.resource tetap dengan nilai aslinya (jika ada)

Multiple Resource

const usersRes = ctx.makeResource('MultiRecordResource');
usersRes.setResourceName('users');
await usersRes.refresh();

const ordersRes = ctx.makeResource('MultiRecordResource');
ordersRes.setResourceName('orders');
await ordersRes.refresh();

ctx.render(
  <div>
    <p>Jumlah user: {usersRes.getData().length}</p>
    <p>Jumlah order: {ordersRes.getData().length}</p>
  </div>
);

Query Sementara

// Query sekali pakai, tidak mengotori ctx.resource
const tempRes = ctx.makeResource('SingleRecordResource');
tempRes.setResourceName('users');
tempRes.setFilterByTk(1);
await tempRes.refresh();
const record = tempRes.getData();

Hal yang Perlu Diperhatikan

  • Resource baru perlu memanggil setResourceName(name) untuk menentukan data table, kemudian memuat data melalui refresh().
  • Setiap instance resource independen, tidak saling memengaruhi; cocok untuk memuat beberapa data source secara paralel.

Terkait