docs/docs/cn/runjs/context/make-resource.md
新建一个 resource 实例并返回,不会写入或改变 ctx.resource。适合需要多个独立 resource 或临时使用的场景。
| 场景 | 说明 |
|---|---|
| 多个 resource | 同时加载多个数据源(如用户列表 + 订单列表),每个用独立 resource |
| 临时查询 | 一次性查询,用完即弃,无需绑定到 ctx.resource |
| 辅助数据 | 主数据用 ctx.resource,额外数据用 makeResource 新建 |
若只需单一 resource 且希望绑定到 ctx.resource,使用 ctx.initResource() 更合适。
makeResource<T = FlowResource>(
resourceType: 'APIResource' | 'SingleRecordResource' | 'MultiRecordResource' | 'SQLResource'
): T;
| 参数 | 类型 | 说明 |
|---|---|---|
resourceType | string | 资源类型:'APIResource'、'SingleRecordResource'、'MultiRecordResource'、'SQLResource' |
返回值:新创建的 resource 实例。
| 方法 | 行为 |
|---|---|
ctx.makeResource(type) | 仅创建新实例并返回,不写入 ctx.resource。可多次调用得到多个独立 resource |
ctx.initResource(type) | 若 ctx.resource 不存在则创建并绑定;已存在则直接返回。保证 ctx.resource 可用 |
const listRes = ctx.makeResource('MultiRecordResource');
listRes.setResourceName('users');
await listRes.refresh();
const users = listRes.getData();
// ctx.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>用户数:{usersRes.getData().length}</p>
<p>订单数:{ordersRes.getData().length}</p>
</div>
);
// 一次性查询,不污染 ctx.resource
const tempRes = ctx.makeResource('SingleRecordResource');
tempRes.setResourceName('users');
tempRes.setFilterByTk(1);
await tempRes.refresh();
const record = tempRes.getData();
setResourceName(name) 指定数据表,再通过 refresh() 加载数据。ctx.resource