在线演练

改变输入,看 restate 如何响应。

七个实验运行的都是真正的包。左边的控制器属于本网站;右边的示例只接收 props,所以它的代码就是你实际要写的代码。

控制器 — 仅属于网站props — 连接两者的桥示例 — 你复制的代码
01

两个界面,一个 store

多个组件需要同一个值。声明一次,到处都能读取。

观察要点
  • 点击步进按钮:所有读取方同时显示新的数字。
  • 改变读取方的数量:新的读取方从当前值开始。

正在准备示例…

快速开始
02

只渲染变化的部分

大型 store 不应该在每次变化时都重新渲染所有组件。

观察要点
  • 编辑留言:只有读取整个 store 的卡片会渲染。
  • 添加商品:商品和摘要渲染,优惠券卡片保持不动。
  • 关闭 shallow:摘要每次变化都会渲染,因为它的 selector 每次都返回新对象。

正在准备示例…

只订阅需要的部分
03

多次变化,一次通知

逐个更新两个 store,会让订阅者看到一个只改了一半的状态。

观察要点
  • 分别清空:订阅者会同时看到 0 件商品和旧的优惠券。
  • 用 batch 清空:两个 store 都变化后,订阅者只运行一次。

正在准备示例…

只订阅需要的部分
04

何时保存由你决定

编辑只改变内存。保存是一个显式操作,状态会显示正在发生什么。

观察要点
  • 输入:dirty 变为开启,此时还没有写入任何内容。
  • 调高延迟后保存:写入进行时 operation 显示 save。
  • 重新播放:已保存的草稿会从 IndexedDB 恢复。

正在准备示例…

何时保存由你决定
05

打字再快,也只写一次

每次按键都保存会让存储不堪重负。autoSave 会等待输入停顿。

观察要点
  • 输入一句话:编辑次数迅速增加,而写入次数在每次停顿后只加一。
  • 选择“每次变化”:每次编辑都会写入,但改回已保存的值时不会写入。

正在准备示例…

何时保存由你决定
06

故障实验室

让存储变慢、出错或不可用,看看 restate 如何保住你的数据并报告问题。

观察要点
  • 调高延迟后保存三次:这些请求共享同一次写入,所以 pending 保持为 1,三个结果同时返回。
  • 开启写入失败后保存:dirty 保持为 true,error 显示原因。
  • 让存储不可用:保存会以 STORAGE_UNAVAILABLE 被拒绝,但编辑照常进行。

正在准备示例…

可靠性设计
07

按文档区分的状态

每个打开的文档都需要自己的状态,并在文档关闭时释放。

观察要点
  • 先在文档 A 中输入,再在 B 中输入:它们各自保留自己的文字。
  • 关闭文档 A 再重新打开:它从空白开始,因为它的 scope 已被销毁。

正在准备示例…

组件拥有的状态

搜索文档

搜索所有指南的标题、描述和正文。