SuperAPI AI 工具集

handle-startup-state

前端与建站

查看项目

更新于 10-16 05:02

技能介绍

用途:让 Flows/Fusion 应用读取启动时携带的状态(深链、可分享 URL 或宿主提供的启动参数),并在首次渲染前恢复,使应用直接打开到正确视图。前提是已接入 @cognite/app-sdk 的 connectToHostApp(),若尚未配置鉴权需先运行 setup-flows-auth 技能。

主要能力与用法:initialState 是 connectToHostApp() 返回对象上的单个不透明字符串,来源可能是用户打开此前经 api.syncInternalState(...) 写出的可分享 URL、宿主嵌入应用时内置的启动参数,或页面重载后 URL 仍保留的参数,三者都通过同一字段到达,只需设计一套恢复逻辑。

步骤:1)选定一种编码并保持一致,可序列化路由(路径字符串)或 JSON 字符串(常见,适合多字段如活动标签、过滤器、选中 ID)。2)在挂载时防御性读取 initialState,用 JSON.parse 解析,务必包 try/catch,解析结果与默认值合并({ ...DEFAULT_STATE, ...parsed })而非直接替换;将解析逻辑抽成纯函数 parseInitialState 以便单元测试。3)用恢复的字段驱动首次渲染,不要先恢复再被后续 effect 用默认值覆盖。4)用 syncInternalState 把状态同步回 URL,每次调用都传完整状态对象,因为它会替换已存值。序列化状态需保持精简,仅存 ID 与视图参数,不存完整数据对象,以远低于约 2000 字符的 URL 上限。5)对 parseInitialState 加测试,覆盖 undefined、有效载荷合并、非法 JSON 回退默认值。

清单要点:首次有意义渲染前恢复;解析包 try/catch 且回退安全;解析结果与默认值合并;解析逻辑可单测;处理 connectToHostApp().catch(),独立运行时仍以默认值渲染;每次变更传完整状态;状态保持小巧。

限制:宿主不保证 initialState 格式良好且自身也不解析,旧版本应用可能写入不同结构,因此必须容错;syncInternalState 仅在应用确有可分享链接概念时才需要。相关:setup-flows-auth、integrate-fusion-agent、App state in URLs。