组件/Reasoning Disclosure

Reasoning Disclosure

可折叠的推理过程区域,流式输出时自动跟随文本尾部。

Verified自 0.3.9

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

属性名类型默认值说明
textstring''推理正文,按原样渲染(保留换行)。
streamingbooleanfalse是否仍在输出;决定头部文案、图标与自动滚动。
durationMsnumber思考耗时(毫秒);仅在非流式时显示。
defaultOpenbooleanfalse初始是否展开。仅在挂载时读取一次。
labelstring'Reasoning'结束后的头部文案。
thinkingLabelstring'Thinking…'流式过程中的头部文案。
durationFormatter(ms: number) => string自定义耗时文案;未设时回退到 Thought for X.Xs

Events

事件名参数说明
toggle(open: boolean)用户点击头部时派发,携带切换后的展开状态。

Slots

TxReasoningDisclosure 不暴露插槽。正文只接受纯文本 text;需要 Markdown 或富文本时,请改用 TxStreamMarkdown 自行组合。

最佳实践

  • 默认保持折叠。推理过程是可选的解释信息,展开会把真正的回答挤出首屏。
  • 流式结束时同时传入 durationMs 并把 streaming 置为 false,否则耗时永远不会出现。
  • 需要跨会话记住展开状态时,请在外层自行持有并按 key 重建组件——改 defaultOpen 是无效的。
  • 本地化时同时覆盖 labelthinkingLabeldurationFormatter,三者混用语言会很明显。