vueuse 中文文档

Vueuse useStorage 响应式存储

Vueuse useStorage 封装了原生的LocalStorage/SessionStorage方法实现响应式存储,我个人不建议用这个方法,可以直接用useLocalStorageuseSessionStorage,他俩用起来更简单。

代码示例

当与Nuxt 3一起使用时,这些函数将不会自动导入,而有利于Nitro的内置useStorage(),如果要使用VueUse中的函数,请使用显式导入。

import { useStorage } from '@vueuse/core'

// 绑定对象,绑定后对象具有响应式能力
const state = useStorage('my-store', { hello: 'hi', greeting: 'Hello' })

// 绑定 boolean
const flag = useStorage('my-flag', true) // returns Ref<boolean>

// 绑定数字
const count = useStorage('my-count', 0) // returns Ref<number>

// 将字符串与SessionStorage绑定
const id = useStorage('my-id', 'some-string-id', sessionStorage) // returns Ref<string>

// 删除本地存储
state.value = null

合并默认值

默认情况如果你写入的key已经存在本地存储中,useStorage是不会合并你新对到本地存储里面,而是以绑定存储对基准数据

import { useStorage } from '@vueuse/core';
//用原生方法写入数据
localStorage.setItem('key_user', '{"id":222}')
//用useStorage绑定对象
const userInfo = useStorage('key_user', { id: 1, url: 'https://www.itxst.com' },localStorage);

//输出结果为undefined,因为默认不会合并已存在的数据
console.log(userInfo.value.url);

设置mergeDefaults:true可以对已经存在数据进行浅合并

import { useStorage } from '@vueuse/core';
//用原生方法写入数据
localStorage.setItem('key_user', '{"id":222}')
//用useStorage绑定对象
const userInfo = useStorage('key_user', { id: 1, url: 'https://www.itxst.com' },localStorage,  { mergeDefaults: true });

//输出结果为 https://www.itxst.com,合并了已存在的数据
console.log(userInfo.value.url);

设置mergeDefaults:true是浅合并,你可以自定义函数进行深合并

import { useStorage } from '@vueuse/core';
//用原生方法写入数据
localStorage.setItem('key_user', '{"id":222}')
//用useStorage绑定对象
const userInfo = useStorage('key_user', 
{ id: 1, url: 'https://www.itxst.com' },
localStorage, 
{ mergeDefaults: (storageValue, defaults) => deepMerge(defaults, storageValue) });
 //deepMerge为你自定义的深度合并函数

自定义序列化

useStorage将根据提供的序列化方法。比如JSON.stringify/JSON.parse将用于对象,Number.toString/parseFloat将用于数字等。

import { useStorage } from '@vueuse/core'
useStorage(
  'key',
  {},
  undefined,
  {
    serializer: {
      read: (v: any) => v ? JSON.parse(v) : null,
      write: (v: any) => JSON.stringify(v),
    },
  }
)

当您提供null作为默认值时,useStorage无法推导数据类型,在这种情况下,您可以提供StorageSerializers对象类型告诉我们如何初始化。

import { useStorage,StorageSerializers } from '@vueuse/core';

const userInfo = useStorage('key_user', null, undefined, { serializer: StorageSerializers.object })
userInfo.value = { foo: 'bar' }

const num = useStorage('key_user', null, undefined, { serializer: StorageSerializers.number })
num.value =100
Catalog
vueuse 入门 State 状态 createGlobalState 全局状态 createInjectionState 组件传值 createSharedComposable useAsyncState 异步响应式 useDebouncedRefHistory useLastChanged 最后修改时间 useLocalStorage 响应式存储 useManualRefHistory useRefHistory 历史快照 useStorageAsync useSessionStorage 响应式存储 useStorage 响应式存储 useThrottledRefHistory Elements 元素 Browser 浏览器 Sensors 感应监测