a2ui-project / a2ui-project/a2ui

bug(lit): v0.8 interactive components missing requestUpdate after setData

未关闭 适合新手
#1,023 4 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
component: lit renderer P2 status: needs review type: bug
主要语言
TypeScript
星标
16.4k
派生
1.3k
平均合并
2 天 13 小时
30 天内合并 PR
134

描述

# Description

While fixing #597 (Slider value not updating) in #1022, I discovered that other v0.8 interactive components have the same latent bug: they call `processor.setData()` without `requestUpdate()`, meaning the component does not re-render after the data model is updated.

## Affected components

| Component | File | Has `requestUpdate()`? |
|---|---|---|
| `Slider` | `renderers/lit/src/0.8/ui/slider.ts` | **Yes** (fixed in #1022) |
| `MultipleChoice` | `renderers/lit/src/0.8/ui/multiple-choice.ts` | **Yes** (already had it) |
| `TextField` | `renderers/lit/src/0.8/ui/text-field.ts` | **No** |
| `DateTimeInput` | `renderers/lit/src/0.8/ui/datetime-input.ts` | **No** |
| `CheckBox` | `renderers/lit/src/0.8/ui/checkbox.ts` | **No** |

## Why it's not immediately visible

- **TextField**: The native \`\` element displays typed characters regardless of Lit re-renders, so the bug is masked. However, any *other* component or label bound to the same data path will not update.
- **CheckBox / DateTimeInput**: These would need testing to confirm visible impact.

## Suggested fix

In #1022 I added a `updateBoundData()` helper to the `Root` base class that encapsulates the `setData()` + `requestUpdate()` pattern. The affected components can be refactored to use it, the change would be minimal for each.

## Root cause

The deeper issue is that `SignalWatcher` does not pick up changes made through `SignalMap.set()` during `processor.setData()`. This might be worth investigating separately in `web_core`, but in the meantime `requestUpdate()` is a reliable workaround (and already used by `MultipleChoice`).

贡献指南

打开贡献指南

调研方向

The issue lists the affected component files in `renderers/lit/src/0.8/ui/`. Examine the `TextField`, `DateTimeInput`, and `CheckBox` components to see where `processor.setData()` is called. Use the `updateBoundData()` helper from the `Root` base class (as introduced in PR #1022) to replace those calls, ensuring each is followed by `requestUpdate()`. Test the changes by running any existing tests for these components or by manually verifying the UI updates correctly.

由索引模型根据 Issue 内容生成。

评估

技术栈
typescript
领域
frontend, web-dev
Issue 类型
缺陷
难度
2/5
预计耗时
1-3 小时
活跃度
冷清
描述清晰度
描述清楚
新手友好度
70/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。