状态与更新
Core 的输入和输出都是响应式的。文本继续增长、配置发生变化时,已有的数据流会更新,不需要为每一个网络片段重新创建 Core。
本页沿用快速开始中的 text、core 和 MarkdownBlock。
追加文本
向 text.next 传入当前完整内容:
如果数据源已经返回累积文本,直接 text.next(fullText) 即可。
订阅列表和内容
一次更新可能增加内容块,也可能只修改已有块里的内容。界面集成需要同时关心这两种变化:
实际接入时,在块加入列表时订阅它的 value,离开列表时取消订阅。外层数组和内容块可能继续保持原来的引用,所以只观察引用变化会漏掉内容更新。
renderItem 适合创建一个绑定内容块的视图。让这个视图订阅 block.value,而不是只在创建时读取一次语法树。
让配置随状态变化
例如,在流式接收期间启用末尾修复,完成后恢复最终文本的呈现。创建 Core 时,将响应式的 build 传入:
用这个 build 替换快速开始中的静态对象。接收完成后:
repair 控制整组修复能力,repairEnding 控制针对流式末尾的修复。其余字段用于开启脚注、公式、缩进代码块和 Setext 标题。
启用平滑输出
Core 默认包含 Smooth,但不会自动启用。先安装预设包,显式配置这个插件:
将以下配置加入创建 Core 时的输入对象:
把 mappers 传给 Core 后,新增内容会按时间逐步进入输出。自己的渲染器依然通过列表和内容块订阅接收变化。
结束时,可以关闭平滑输出,立即呈现剩余内容:
Shad 可为末尾内容增加渐变标记。enabled、length 和 maskWidth 配置支持普通值或可读闭包;maskWidth 控制渐变宽度,单位为像素,默认为 15。需要渲染器支持相应节点才能表现为视觉效果,React、Vue、Svelte、Angular、React Native、Lynx、Solid 与 Taro 预设已包含对应的渲染插件。
Scale 为逐字入场效果生成字符和词标记。与 Smooth 一样,enabled、duration、from 和 blur 配置支持普通值或可读闭包。自定义渲染器需要处理这些标记;React、Vue、Svelte、Angular、React Native、Lynx、Solid 与 Taro 组件可直接使用更简洁的 streaming.effect 配置。
清理资源
一个 Core 实例对应一个独立的内容生命周期。完成使用后,先取消你建立的订阅,再销毁 Core 与外部输入:
Core 会清理自己创建的状态和插件;在外部创建的状态由调用方管理。