logologo
开始
手册
开发
插件
API
首页
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
开始
手册
开发
插件
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.openView()
Next Pagectx.request()

#ctx.render

将 React 元素、HTML 字符串或 DOM 节点渲染到 ctx.element 容器中。

#类型定义

render(
  vnode: React.ReactElement | Node | DocumentFragment | string
): ReactDOMClient.Root | null

#参数

  • vnode:要渲染的内容
    • React.ReactElement:React 元素(JSX),具备完整 React 能力
    • Node:DOM 节点,直接追加到容器
    • DocumentFragment:片段的子节点会追加到容器
    • string:HTML 字符串,会设置容器的 innerHTML

#返回值

  • 渲染 React 元素时:返回 ReactDOMClient.Root 实例,便于后续更新
  • 渲染 HTML 字符串或 DOM 节点时:返回 null

#说明

  • 内容会渲染到 ctx.element 容器内
  • 多次调用 ctx.render() 会替换容器内已有内容
  • 渲染 React 元素时使用 React 的 createRoot API,并自动继承应用上下文
  • 渲染 HTML 字符串时,会先卸载容器内已有的 React 根

#示例

#渲染 JSX

ctx.render(<button>Button</button>);

#渲染 DOM 节点

const div = document.createElement('div');
div.innerHTML = 'Hello World';
ctx.render(div);

#渲染 HTML 字符串

ctx.render('<h1>Hello World</h1>');

#使用内置 React 与组件库

const { Button } = ctx.libs.antd;

ctx.render(<Button>Click</Button>);

#使用外部 React 与组件库

通过 ctx.importAsync() 按需加载指定版本:

const React = await ctx.importAsync('react@19.2.4');
const { Button } = await ctx.importAsync('antd@6.2.2?bundle');

ctx.render(<Button>Click</Button>);

适合需要特定版本或第三方组件的场景。

#不推荐:直接操作 ctx.element

已废弃的用法:

ctx.element.innerHTML = '<h1>Hello World</h1>';

推荐使用 ctx.render():

ctx.render(<h1>Hello World</h1>);