ToolJet Link 组件详解:链接属性、事件、CSA 与样式配置实战解析
2026/9/10 14:31:53 网站建设 项目流程

ToolJet Link 组件详解:链接属性、事件、CSA 与样式配置实战解析

【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 🚀项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet

本文基于 ToolJet 官方组件文档 Link,系统讲解 Link(链接)组件的完整用法:如何用 Link target / Link text / Target type 三个核心属性创建外部超链接、如何通过 On click / On hover 事件触发业务逻辑、如何用组件特定操作(CSA)以 RunJS 方式编程控制组件,以及 General、Devices、Styles 各配置区的具体参数。读完后你可以直接在 ToolJet 应用中复制可用的链接组件配置,并理解每个参数在源码中的实际行为与默认值。

组件定位与默认定义

Link 组件用于在页面中添加一个可点击的超链接,点击后跳转到外部 URL。它既是导航出口(跳到外部网站、文档、报表系统),也可以作为业务入口(比如打开审批单、跳转到详情页)。

在 ToolJet 前端源码中,Link 组件的完整注册配置位于 link.js。该文件声明了组件的默认尺寸、属性、事件、样式、动作和初始定义。从源码结构看,几个值得注意的默认值:

配置项默认值源码依据
默认尺寸宽 6、高 30(defaultSizelink.js#L5-L8
Link targethttps://dev.to/link.js#L23-L30
Link textClick herelink.js#L15-L22
Target typenew(New Tab)link.js#L31-L41
文本颜色var(--cc-primary-brand)(主题主色)link.js#L94-L102
文本大小14link.js#L103-L110
Underlineon-hoverlink.js#L143-L156
Show on desktop / Show on mobile{{true}}/{{false}}link.js#L213-L217

需要注意的是,Link 组件在设备可见性上的默认行为是"仅桌面端可见"(showOnDesktop{{true}}showOnMobile{{false}})。如果应用有移动端访问需求,需要在 Devices 配置区手动打开 Show on mobile,否则链接在移动端视图中不会出现。

核心属性:Link target、Link text 与 Target type

Link 组件在 Properties 配置区提供三个核心属性,全部支持fx动态取值(即表达式绑定):

属性说明取值示例
Link target设置用户点击链接后要跳转到的 URLhttps://dev.to/tooljet{{queries.xyz.data.url}}
Link text设置链接上展示的文本Click hereOpen webpage
Target type指定链接点击后在同一标签页还是新标签页打开New Tab/Same Tab

三个属性在 link.js 中的定义细节如下:

  • linkText:类型code(字符串校验),默认Click here。由于是 code 类型,可以直接写表达式,例如用{{user.firstName}}动态拼接个性化文案。
  • linkTarget:类型code(字符串校验),默认https://dev.to/。典型用法是绑定查询结果,例如{{queries.getTicketUrl.data.ticketUrl}},让每个用户看到自己工单的地址。
  • targetType:类型select,两个选项:New Tab(值new)与Same Tab(值same)。

组件渲染实现位于 Link.jsx。从源码逻辑可以确认两个关键行为:

  1. href 是条件渲染的:只有当linkTargetState非空字符串时,<a>标签才会带上href属性(见 Link.jsx#L114)。也就是说,如果 fx 表达式解析出空值,链接不会生成 href,点击只会触发 onClick 事件而不会跳转。
  2. targetType 的映射:仅当targetType === 'new'时才会输出target="_blank"(见 Link.jsx#L115),same则直接在当前标签页内导航。

事件:On click 与 On hover

Link 组件支持两个事件,可在 Events 配置区为它们绑定动作(Actions):

事件触发时机
On click链接被点击时触发
On hover鼠标光标悬停在链接上时触发

事件与源码的对应关系在 Link.jsx#L116-L126 中:

  • onClick:绑定在<a>onClick处理器上。处理器内部先检查禁用态(isDisabled为真时调用event.preventDefault()直接返回),随后event.stopPropagation()并调用fireEvent('onClick')触发该组件配置的所有 On click 动作。由于事件绑定在内层<a>上且做了 stopPropagation,悬停容器空白区域不会产生误触发。
  • onHover:绑定在<a>onMouseOver处理器上,光标进入链接文本区域即调用fireEvent('onHover')

典型使用场景:在 On click 中绑定Show alertRun queryOpen webpage等动作(完整的动作清单见 Actions Reference 所在的动作文档目录docs/docs/actions/),实现"点击链接先记录埋点/提交校验,再跳转"之类的复合逻辑。

需要区分的是:打开新标签页是浏览器对 href 的原生行为,而 On click 事件是 ToolJet 的扩展点——两者同时生效。如果你希望"点击不跳转、只执行动作",可以把 Link target 留空(此时 href 不渲染),仅依赖 On click 动作完成业务。

组件特定操作(CSA)

除了配置区的手动操作,Link 组件暴露了一组组件特定操作(Component Specific Actions),可以在 RunJS 查询中直接调用,也可以从其他事件触发。官方文档明确给出的是click,而 link.js#L182-L212 中actions数组声明了完整清单:

动作参数说明
click编程式触发一次链接点击(等价于用户点击,会执行 On click 事件链并触发浏览器跳转行为)
setLinkTargetvalue(code)运行时修改链接跳转地址
setLinkTextvalue(code)运行时修改链接文本,仅接受字符串(见 Link.jsx#L88-L92)
setVisibilityvalue(toggle)编程控制组件可见性
setDisablevalue(toggle)编程控制禁用态
setLoadingvalue(toggle)编程控制加载态(显示 Loader 占位)

文档中给出的访问方式示例:

// RunJS 查询示例:以编程方式触发 Link 组件的点击 await components.link1.click();

更完整的编程控制示例(在 RunJS 中动态改写链接并切换可见性):

// 根据查询结果动态设置跳转地址与文案 await components.link1.setLinkTarget(`https://report.example.com/detail?id=${queries.getId.data.id}`); await components.link1.setLinkText('查看报表'); // 禁用期间屏蔽点击(点击会被 preventDefault),恢复后再放开 await components.link1.setDisable(true); await components.link1.setVisibility(false);

从源码结构看,这些方法的实现集中在 Link.jsx#L62-L96 的挂载副作用中:click通过clickRef.current.click()模拟一次真实 DOM 点击,因此会完整走一遍onClick处理器(包括禁用态检查);而setVisibility/setDisable/setLoading除了更新组件自身状态,还会同步刷新对应的外露变量(isVisibleisDisabledisLoading),保证其他组件的 fx 表达式能读到最新状态。

General:Tooltip 配置

General折叠区可以为链接配置悬停提示(Tooltip):用户鼠标悬停在组件上时,显示一段额外的说明文字。

官方文档描述的是"以字符串形式设置,悬停时展示"。而 link.js#L66-L87 中的实际配置比文档更细一步,Tooltip 由一对字段组成:

字段类型说明
tooltipFormatswitch内容格式,三选一:Plain text(默认)、MarkdownHTML
tooltipcode提示文案本体,支持 fx 表达式,占位示例为Tooltip text

也就是说,除了纯字符串,你还可以给链接配置 Markdown 或 HTML 格式的富文本提示,例如在提示里嵌入{{queries.getQuota.data.remaining}}这样的动态数据,格式切换项即tooltipFormat

Devices:设备可见性

Devices 区提供两个开关,用于控制链接在不同终端视图中的显示,两者都可以直接用开关手动设置,也可以点击fx输入逻辑表达式动态控制:

属性说明源码默认值
Show on desktop桌面端视图中是否显示该组件{{true}}
Show on mobile移动端视图中是否显示该组件{{false}}

源码中这两个值对应配置others段(link.js#L10-L13 定义、link.js#L213-L217 给出初始值)。fx 表达式示例:{{user.role == 'admin'}},仅管理员在桌面端看到该链接。

Styles:样式配置

Styles 区控制链接的外观,文档列出的四项核心样式如下,并补充了源码中的默认值与更多可用项:

样式说明默认值
Text color通过 Hex 色值或取色器设置文本颜色var(--cc-primary-brand)(主题主色变量)
Text size文本字号,官方文档说明范围为 1–100{{14}}
Underline下划线模式:On Hover(默认)、NeverAlwayson-hover
Visibility组件可见性开关,支持fx编程控制;{{false}}时应用部署后组件不可见,默认{{true}}{{true}}

任何带fx按钮的属性都可以编程化配置。除以上四项,link.js 的 styles 段 还声明了以下可选项:

  • Alignment / verticalAlignment:水平对齐(默认left)与垂直对齐(默认center),渲染层将其映射为 flex 布局的justifyContent/alignItems(Link.jsx#L19-L24)。
  • Box Shadow:容器阴影,默认0px 0px 0px 0px #00000040(无实际阴影)。
  • PaddingDefault/None两档,默认Default
  • Icon / Icon visibility:默认隐藏(iconVisibility: false);打开后可为链接前置一个图标,图标尺寸固定为textSize + 2px(Link.jsx#L31)。

一个值得理解的实现细节是悬停变色机制:Link.jsx#L29 用tinycolor把配置的文本颜色调暗 8% 生成 CSS 变量--link-hover-color,link.scss 中.link-text:hover消费该变量。因此下划线模式为on-hover时,悬停效果是"变色 + 下划线"双反馈;no-underlineunderline两个取值则通过外层cx('link-widget', { 'd-none': !isVisible }, \${underline}`)` 把样式名直接拼进 class 来控制(Link.jsx#L109)。

运行态与外露变量

官方文档在 Exposed Variables 一节说明"该组件目前没有外露变量",这与 link.js#L181 中exposedVariables: {}的静态声明一致。但从源码结构看,Link.jsx#L38-L59 在运行时还会动态注册一组状态型外露变量:linkTargetlinkTextisLoadingisVisibleisDisabled。从源码结构看,这些变量主要用于让其他组件或表达式读取链接的当前运行状态,属于实现层提供的补充能力,文档尚未逐一列举。

另外两个行为值得注意:

  • 禁用态disabledState为真时,组件整体opacity降为 0.5、pointerEvents置为none(Link.jsx#L26-L27),且 onClick 处理器内会再次preventDefault兜底,双重保证禁用期间不跳转、不触发事件。
  • 加载态loadingState为真时,组件整体替换为居中 Loader 占位(Link.jsx#L98-L106),适合"等查询返回后再显示链接"的场景,可配合setLoadingCSA 使用。

验证入口与相关文档

  • 组件的端到端基础验证用例见 componentsBasicHappypath.skip.js#L482-L483("Should verify Link",通过verifyComponentWithOutLabel("Link", "link1", "link2", ...)校验组件渲染)。
  • 事件绑定涉及的具体动作(如Open webpageRun query)参考动作文档目录 docs/docs/actions/。
  • 组件默认配置与属性清单的权威来源:link.js;渲染与事件实现:Link.jsx。

小结:Link 组件本身轻量,但通过"fx 表达式 + 事件 + CSA"三层机制,它既能承载静态外链,也能成为完全由数据驱动的动态入口。实际项目中常见的组合是:Link target 绑定查询结果、On click 绑定审计/埋点动作、Visibility 用 fx 表达式做权限控制;需要用户点击时才跳转(例如二次确认流程)时,则利用click这个 CSA 以编程方式触发。

【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 🚀项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询