logologo
开始
教程
手册
开发
插件
API
首页
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
开始
教程
手册
开发
插件
API
首页
logologo
RunJS 概述
导入模块
容器内渲染

全局变量

window
document
navigator

ctx

ctx.blockModel
ctx.collection
ctx.collectionField
ctx.dataSource
ctx.dataSourceManager
ctx.element
ctx.exit()
ctx.exitAll()
ctx.filterManager
ctx.form
ctx.getModel()
ctx.getValue()
ctx.getVar()
ctx.i18n
ctx.importAsync()
ctx.initResource()
ctx.libs
ctx.location
ctx.logger
ctx.makeResource()
ctx.message
ctx.modal
ctx.model
ctx.notification
ctx.off()
ctx.on()
ctx.openView()
ctx.render()
ctx.request()
ctx.requireAsync()
ctx.resource
ctx.route
ctx.router
ctx.setValue()
ctx.sql
ctx.t()
ctx.view
Previous Pagectx.initResource()
Next Pagectx.location

#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.React、ctx.ReactDOM、ctx.antd、ctx.dayjs。推荐统一使用 ctx.libs.xxx,便于维护与文档检索。

#懒加载

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

#示例

#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。

#相关

  • ctx.importAsync() - 按需加载外部 ESM 模块(如指定版本的 React、Vue)
  • ctx.render() - 渲染内容到容器