Skip to content

单次行程存储 $sessionStorage ​

当你需要“本次行程的峰值”“上一次有效读数”等临时数据时,使用 $sessionStorage。它属于当前卡片在当前记录中的存储,不是永久数据库。

接口 ​

方法返回值作用
get(key)已存数据或 null读取一个字符串键
set(key, value)undefined存储普通数据快照
jsx
function main() {
  const speed = $data.current.speedMPS;
  const previous = $sessionStorage.get('peakMPS');
  const peak = speed === null ? previous : Math.max(previous ?? 0, speed);
  if (peak !== null) $sessionStorage.set('peakMPS', peak);
  return <Text color={$env.foreground}>
    {peak === null ? '—' : (peak * 3.6).toFixed(1) + ' km/h'}
  </Text>;
}

这里保存的是米/秒,避免用户切换 km/h 与 mph 后把不同单位的数字混在一起。完整版本见本次行程峰值。

什么时候保留,什么时候清空 ​

情况行为
同一次记录中更新读数保留
同一次记录中导航离开、重新挂载卡片保留在该卡片的存储中
同一次记录中重新加载代码不应当作重新开始一段记录
记录结束、停止或进入新的记录清空
App 进程退出后重新启动不恢复
同一源码放入两个卡片位置两个卡片各自独立
编辑器预览与缩略图使用独立临时存储,不影响真实行程

没有活动记录的实时卡片读到 null,写入不会形成持续存储。

能保存什么 ​

可以保存字符串、有限数值、布尔值、null、普通对象和数组。不能保存函数、JSX 组件描述、循环引用或特殊原型对象。

读取和写入都复制数据。修改读出的对象之后,必须再调用一次 set() 才会更新存储:

jsx
const stats = $sessionStorage.get('stats') ?? {count: 0};
stats.count += 1;
$sessionStorage.set('stats', stats);

注意这段计数表示函数被调用的次数,不是秒数或传感器采样次数;需要时间统计时请使用采样时间。

限制 ​

每个卡片的存储最多 256 个键,估算总量约 1 MiB,数据嵌套最多 32 层,键最长 256 个 UTF-8 字节。超限会报告错误,并保留原来的数据。

set() 不主动触发界面刷新。画面仍在 CapDrive 提供新输入时更新;不能用它模拟 React 状态或浏览器定时器。