Skip to content

同步数据

Zova 利用 TanStack Query 的数据管理机制,实现了对同步数据的管理,从而方面我们在 cookie 和 localstorage 中同步写入和读取数据

下面,我们演示如何在 Model 中管理用户的数据

创建Model Bean

首先在 a-demo 模块中创建一个 Model Bean user

bash
$ zova :create:model user --module=a-demo

src/bean/model.user.ts

typescript
import { Model } from 'zova';
import { BeanModelBase } from 'zova-module-a-model';

@Model()
export class ModelUser extends BeanModelBase {}
  • 使用@Model 装饰器
  • 继承自基类 BeanModelBase

localstorage

下面演示把用户信息存入 localstorage,当页面刷新时也会保持数据

如何定义

typescript
export class ModelUser extends BeanModelBase<ScopeModule> {
  user?: ServiceUserEntity;

  protected async __init__() {
    this.user = this.$useQueryLocal({
      queryKey: ['user'],
    });
  }
}
  • 异步数据定义不同,同步数据直接在初始化方法__init__中定义
  • 调用$useQueryLocal 创建 Query 对象
  • 传入 queryKey,确保本地缓存的唯一性

如何使用

直接像常规变量一样读取和设置数据

typescript
const user = this.user;
this.user = newUser;

下面演示把用户 Token 存入 cookie,当页面刷新时也会保持数据

如何定义

typescript
export class ModelUser extends BeanModelBase<ScopeModule> {
  token?: string;

  protected async __init__() {
    this.token = this.$useQueryCookie({
      queryKey: ['token'],
    });
  }
}
  • 异步数据定义不同,同步数据直接在初始化方法__init__中定义
  • 调用$useQueryCookie 创建 Query 对象
  • 传入 queryKey,确保本地缓存的唯一性

如何使用

直接像常规变量一样读取和设置数据

typescript
const token = this.token;
this.token = newToken;

基于 MIT 许可发布