Reasoning Disclosure
可折叠的推理过程区域,流式输出时自动跟随文本尾部。
Reasoning Disclosure
基础用法
Reasoning Disclosure
示例加载中...
交互契约
- 展开状态由组件自己持有,初值取
defaultOpen。这是非受控组件:后续修改defaultOpen不会再改变展开状态。 - 点击头部切换展开并派发
toggle,参数是切换之后的状态。 - 头部文案随
streaming切换:为真时用thinkingLabel,否则用label。 - 耗时只在「非流式且
durationMs有值」时显示,因此流式过程中不会出现半截的时间。默认格式为Thought for X.Xs,可用durationFormatter接管。 streaming为真时,text每次变化都会把文本区滚到底部,让新内容始终可见;非流式时不干预用户的滚动位置。- 头部是原生
<button>,带aria-expanded与指向内容区的aria-controls;两个图标均为aria-hidden。 - 折叠时内容区仍在 DOM 中,只是被收起——长推理文本不会因为折叠而停止占用内存。
API
Props
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
text | string | '' | 推理正文,按原样渲染(保留换行)。 |
streaming | boolean | false | 是否仍在输出;决定头部文案、图标与自动滚动。 |
durationMs | number | — | 思考耗时(毫秒);仅在非流式时显示。 |
defaultOpen | boolean | false | 初始是否展开。仅在挂载时读取一次。 |
label | string | 'Reasoning' | 结束后的头部文案。 |
thinkingLabel | string | 'Thinking…' | 流式过程中的头部文案。 |
durationFormatter | (ms: number) => string | — | 自定义耗时文案;未设时回退到 Thought for X.Xs。 |
Events
| 事件名 | 参数 | 说明 |
|---|---|---|
toggle | (open: boolean) | 用户点击头部时派发,携带切换后的展开状态。 |
Slots
TxReasoningDisclosure 不暴露插槽。正文只接受纯文本 text;需要 Markdown 或富文本时,请改用 TxStreamMarkdown 自行组合。
最佳实践
- 默认保持折叠。推理过程是可选的解释信息,展开会把真正的回答挤出首屏。
- 流式结束时同时传入
durationMs并把streaming置为false,否则耗时永远不会出现。 - 需要跨会话记住展开状态时,请在外层自行持有并按
key重建组件——改defaultOpen是无效的。 - 本地化时同时覆盖
label、thinkingLabel与durationFormatter,三者混用语言会很明显。