feat: add localforage

This commit is contained in:
landaiqing
2024-04-29 16:00:47 +08:00
parent edcff9a7c7
commit 9762e15b8b
17 changed files with 726 additions and 147 deletions

View File

@@ -1,22 +1,23 @@
import { action, makeAutoObservable } from 'mobx'
import { makePersistable, isHydrated } from 'mobx-persist-store'
import { handleLocalforage } from '@/utils/localforage'
export class useUserStore {
user: any = {}
token: any = ''
constructor() {
makeAutoObservable(
this,
{
setUserInfo: action,
setToken: action,
},
{ autoBind: true },
)
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
makePersistable(this, {
// @ts-ignore
makePersistable(this, {
// 在构造函数内使用 makePersistable
name: 'userStore', // 保存的name用于在storage中的名称标识只要不和storage中其他名称重复就可以
properties: ['user'], // 要保存的字段这些字段会被保存在name对应的storage中注意不写在这里面的字段将不会被保存刷新页面也将丢失get字段例外。get数据会在数据返回后再自动计算
storage: window.localStorage, // 保存的位置看自己的业务情况选择可以是localStoragesessionstorage
name: 'token', // 保存的name用于在storage中的名称标识只要不和storage中其他名称重复就可以
properties: ['token'], // 要保存的字段这些字段会被保存在name对应的storage中注意不写在这里面的字段将不会被保存刷新页面也将丢失get字段例外。get数据会在数据返回后再自动计算
storage: handleLocalforage, // 保存的位置看自己的业务情况选择可以是localStoragesessionstorage
// 。。还有一些其他配置参数例如数据过期时间等等可以康康文档像storage这种字段可以配置在全局配置里详见文档
}).then(
action(() => {
@@ -25,16 +26,13 @@ export class useUserStore {
}),
)
}
get getUserInfo() {
return this.user
}
get token() {
return this.user ? this.user.token : ''
get getToken() {
return this.token ? this.token : null
}
get isHydrated() {
return isHydrated(this)
}
setUserInfo(user: object) {
this.user = user
setToken(token: string) {
this.token = token
}
}