usePublishMark
表单里唯一值得做动画的那一刻,用三个状态表达。
属于
@aora-bot/surfaces,不在@aora-bot/react里:pnpm add @aora-bot/surfaces @aora-bot/react,并在 React 样式之后引入@aora-bot/surfaces/styles.css。
idle
为什么只在这里
发布是角色难得能证明自己价值的交互:有一段真实的等待、一个真实的结果,而且结果是好消息。所以角色在请求未返回时工作,落地时庆祝,然后自己收场——需要人手动关掉的庆祝就不再是庆祝了。
失败直接回到静息,而不是换一张难过的脸。表单马上要显示出错信息,旁边再有个角色摆表情,看起来就像这个库在替你发表意见。
约定
usePublishMark(options) 返回一个 PublishMark:
选项:
confetti——指向ConfettiLayer的 ref。成功时 hook 会触发burst(默认 20 片),宿主不必自己盯着那一刻。它由调用方提供而不是由 hook 返回:ref 属于它挂着的那个元素,hook 往外递 ref 会诱使人在渲染期间读.current。celebrateMs——庆祝持续多久(默认 1600 毫秒)。onSettled——庆祝结束时调用。适合在这里关闭对话框。
组件卸载时进行中的庆祝会被取消,不会向已经不存在的组件发状态更新。TemplateDialog 的保存按钮用的就是这个 hook。
接下来
- ConfettiLayer——盖在任何东西上的纸屑
- 庆祝——干活、庆祝、收起来