ctx.libs

ctx.libs 是 RunJS 内置库的统一命名空间,包含 React、Ant Design、dayjs、lodash 等常用库。无需 import 或异步加载,可直接通过 ctx.libs.xxx 使用。

适用场景

场景说明
JSBlock / JSField / JSItem / JSColumn使用 React + Ant Design 渲染 UI、dayjs 处理日期、lodash 做数据处理
公式 / 计算使用 formula 或 math 做类 Excel 公式、数学表达式运算
事件流 / 联动规则在纯逻辑场景中调用 lodash、dayjs、formula 等工具库

内置库一览

属性说明文档
ctx.libs.ReactReact 本体,用于 JSX 与 HooksReact
ctx.libs.ReactDOMReactDOM 客户端 API(含 createRoot),配合 React 渲染React DOM
ctx.libs.antdAnt Design 组件库(Button、Card、Table、Form、Input、Modal 等)Ant Design
ctx.libs.antdIconsAnt Design 图标库(如 PlusOutlined、UserOutlined)@ant-design/icons
ctx.libs.dayjs日期时间工具库dayjs
ctx.libs.lodash工具库(get、set、debounce 等)Lodash
ctx.libs.formula类 Excel 公式函数库(SUM、AVERAGE、IF 等)Formula.js
ctx.libs.math数学表达式与计算库Math.js

顶层别名

为兼容历史代码,部分库同时暴露在顶层:ctx.Reactctx.ReactDOMctx.antdctx.dayjs推荐统一使用 ctx.libs.xxx,便于维护与文档检索。

懒加载

lodashformulamath 等采用懒加载:首次访问 ctx.libs.lodash 时才发起动态 import,之后复用缓存。ReactantddayjsantdIcons 由上下文预置,访问即可用。

示例

React 与 Ant Design 渲染

const { Button, Card } = ctx.libs.antd;

ctx.render(
  <Card title="标题">
    <Button type="primary">点击</Button>
  </Card>
);

使用 Hooks

const { React } = ctx.libs;
const { useState } = React;
const { Button } = ctx.libs.antd;

const App = () => {
  const [count, setCount] = useState(0);
  return <Button onClick={() => setCount((c) => c + 1)}>{count}</Button>;
};
ctx.render(<App />);

使用图标

const { Button } = ctx.libs.antd;
const { UserOutlined, HeartOutlined } = ctx.libs.antdIcons;

ctx.render(<Button icon={<UserOutlined />}>用户</Button>);

dayjs 日期处理

const now = ctx.libs.dayjs();
const formatted = now.format('YYYY-MM-DD HH:mm:ss');
ctx.message.info(formatted);

lodash 工具函数

const user = { profile: { name: 'Alice' } };
const name = ctx.libs.lodash.get(user, 'profile.name', 'Unknown');

formula 公式计算

const values = [1, 2, 3, 4];
const sum = ctx.libs.formula.SUM(values);
const avg = ctx.libs.formula.AVERAGE(values);

math 数学表达式

const result = ctx.libs.math.evaluate('2 + 3 * 4');
// result === 14

注意事项

  • 与 ctx.importAsync 混用:若通过 ctx.importAsync('react@19') 加载了外部 React,JSX 会使用该实例;此时不要ctx.libs.antd 混用,antd 需与该 React 版本配套加载(如 ctx.importAsync('antd@5.x')ctx.importAsync('@ant-design/icons@5.x'))。
  • 多 React 实例:若出现 “Invalid hook call” 或 hook dispatcher 为 null,通常由多个 React 实例引起。在读取 ctx.libs.React 或调用 Hooks 前,先执行 await ctx.importAsync('react@版本') 确保与页面共用同一 React。

相关