SuperAPI AI 工具集

signals

通用与其它

查看项目

更新于 10-16 03:38

技能介绍

用途:该技能用于指导智能体在 Vaadin 25 Flow 中使用 Signals 进行响应式状态管理。当用户提出“使用 signals”“管理状态”等需求时启用。不确定具体 API 细节时,可用 Vaadin MCP 工具 search_vaadin_docs 查询最新文档,vaadin_version 设为 "25.1",ui_language 设为 "java";需要精确 Java API 签名或源码时,用 javadoc MCP 从 Maven Central 读取 Javadoc 与源码。

主要能力:Signals 保存值,值变化时依赖的 UI 自动更新,无需手动增删监听器。特性包括响应式传播、自动依赖追踪、适合不可变值、线程安全(可从任意线程更新,无需 ui.access())。分两类:本地信号(ValueSignal、ListSignal,位于 com.vaadin.flow.signals.local)用于单会话 UI 状态;共享信号(SharedValueSignal、SharedNumberSignal、SharedListSignal、SharedMapSignal、SharedNodeSignal,位于 com.vaadin.flow.signals.shared)用于多用户/事务状态,跨集群可用。多用户场景需启用 @Push 以即时传播。

使用方式:读取用 get()(响应式,须在响应式上下文内)或 peek()(非响应式);写入用 set()、update()、replace();可变值用 modify();map() 派生值。ListSignal 支持 insertLast/insertFirst/insertAt/remove/clear/moveTo,每个条目是独立 ValueSignal。效果用 Signal.effect(component, ...) 或 Signal.unboundEffect(...)(需手动清理),计算信号用 Signal.computed(...)。绑定包括 bindText、bindVisible、bindEnabled、bindValue(双向)、bindChildren、bindReadOnly、bindPlaceholder、bindHelperText、bindWidth、bindClassName、getStyle().bind 等,元素级有 bindAttribute、bindProperty、getClassList().bind。作用域分视图(私有实例字段)、会话(@Component @VaadinSessionScope)、应用(@Component 单例)。事务用 Signal.runInTransaction(...),支持 verifyValue 与返回值。

限制:本地信号不能参与事务,在 runInTransaction() 内使用会抛异常;绑定期间手动修改元素属性会抛 BindingActiveException,需用 bindText(null) 等解绑;get() 在响应式上下文外抛 IllegalStateException;未绑定的效果必须手动 remove 以免内存泄漏。资料未提供收费、价格与平台信息。