ctx.makeResource()

Creates and returns a new resource instance without writing to or modifying ctx.resource. It is suitable for scenarios requiring multiple independent resources or temporary usage.

Use Cases

ScenarioDescription
Multiple resourcesLoad multiple data sources simultaneously (e.g., user list + order list), each using an independent resource.
Temporary queriesOne-time queries that are discarded after use, without needing to bind to ctx.resource.
Auxiliary dataUse ctx.resource for primary data and makeResource to create instances for additional data.

If you only need a single resource and want to bind it to ctx.resource, using ctx.initResource() is more appropriate.

Type Definition

makeResource<T = FlowResource>(
  resourceType: 'APIResource' | 'SingleRecordResource' | 'MultiRecordResource' | 'SQLResource'
): T;
ParameterTypeDescription
resourceTypestringResource type: 'APIResource', 'SingleRecordResource', 'MultiRecordResource', 'SQLResource'

Returns: The newly created resource instance.

Difference from ctx.initResource()

MethodBehavior
ctx.makeResource(type)Only creates and returns a new instance, not writing to ctx.resource. Can be called multiple times to obtain multiple independent resources.
ctx.initResource(type)Creates and binds if ctx.resource does not exist; returns it directly if it already exists. Ensures ctx.resource is available.

Examples

Single resource

const listRes = ctx.makeResource('MultiRecordResource');
listRes.setResourceName('users');
await listRes.refresh();
const users = listRes.getData();
// ctx.resource remains its original value (if any)

Multiple resources

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>User count: {usersRes.getData().length}</p>
    <p>Order count: {ordersRes.getData().length}</p>
  </div>
);

Temporary query

// One-time query, does not pollute ctx.resource
const tempRes = ctx.makeResource('SingleRecordResource');
tempRes.setResourceName('users');
tempRes.setFilterByTk(1);
await tempRes.refresh();
const record = tempRes.getData();

Notes

  • The newly created resource needs to call setResourceName(name) to specify the collection, and then load data via refresh().
  • Each resource instance is independent and does not affect others; suitable for loading multiple data sources in parallel.