@composy/storage-vue
v0.0.1
Published
LDesign 存储管理 - Vue 3 适配器
Maintainers
Readme
@composy/storage-vue
@composy/storage-vue 为 @composy/storage-core 提供 Vue 侧接入能力。
能力范围
- 原生 Vue plugin:
createStoragePlugin @composy/engine-coreplugin:createStorageEnginePlugin- composables
useStorageuseLocalStorageuseSessionStorageuseCookieuseIndexedDB
设计约束
- 原生 Vue plugin 和 engine plugin 共用同一个 runtime 安装链。
- composable 默认优先复用已注入的
StorageManager;没有注入时再退回到对应介质的共享 manager。 useIndexedDB在普通Ref<T>基础上额外提供ready(),方便等待异步初始化。
原生 Vue plugin
import { createStoragePlugin } from '@composy/storage-vue'
import { createApp } from 'vue'
import App from './App.vue'
const app = createApp(App)
app.use(createStoragePlugin({
prefix: 'demo',
defaultTTL: 60_000,
}))
app.mount('#app')安装后会提供:
provide(STORAGE_MANAGER_SYMBOL, manager)provide('storage', manager)provide('storageManager', manager)provide('ldesign-storage', manager)app.config.globalProperties.$storage
engine plugin
import { createStorageEnginePlugin } from '@composy/storage-vue'
engine.use(createStorageEnginePlugin({
name: 'storage',
prefix: 'demo',
}))当 engine 已经创建 Vue app 时,plugin 会把 runtime 安装到 app 并同步写入 engine state;如果 app 尚未创建,会等待 app:created 后再完成绑定。
composables
useStorage
import { LocalStorageAdapter } from '@composy/storage-core'
import { useStorage } from '@composy/storage-vue'
const state = useStorage(
'draft',
'',
new LocalStorageAdapter(),
{
prefix: 'demo',
ttl: 10_000,
syncTabs: true,
},
)
console.info(state.value)useLocalStorage
const username = useLocalStorage('username', 'guest', {
prefix: 'demo',
syncTabs: true,
})
console.info(username.value)useCookie
const token = useCookie('token', '', {
path: '/',
secure: true,
sameSite: 'lax',
})
console.info(token.value)useIndexedDB
const history = useIndexedDB('history', [], {
prefix: 'demo',
databaseName: 'demo-storage',
})
await history.ready()同步规则
- 同一应用内的多处读写,统一通过
StorageManager事件保持同步。 syncTabs: true当前只对能拿到浏览器原生Storage实例的适配器生效,也就是localStorage/sessionStorage。cookie和indexedDB目前不会额外创建跨标签页广播通道。
