useStorage 
LocalStorage または SessionStorage へアクセス&変更するために使用できるリアクティブな ref を作成します。
デフォルトでは localStorage を使用します。その他のストレージソースは、第 3 引数で指定できます。
デモ 
name: 'Banana'
color: 'Yellow'
size: 'Medium'
count: 0
使用方法 
ヒント
Nuxt 3 で使用する場合、この関数は Nitro の組み込み useStorage() を優先して自動インポートされ**ません**。 VueUse の関数を使用する場合は、明示的にインポートしてください。
import { useStorage } from '@vueuse/core'
// bind object
const state = useStorage('my-store', { hello: 'hi', greeting: 'Hello' })
// bind boolean
const flag = useStorage('my-flag', true) // returns Ref<boolean>
// bind number
const count = useStorage('my-count', 0) // returns Ref<number>
// bind string with SessionStorage
const id = useStorage('my-id', 'some-string-id', sessionStorage) // returns Ref<string>
// delete data from storage
state.value = nullデフォルト値のマージ 
デフォルトでは、useStorage はストレージに値が存在する場合、その値を使用し、デフォルト値を無視します。 デフォルト値にプロパティを追加する場合、クライアントのストレージにそのキーがないと、キーが `undefined` になる可能性があることに注意してください。
localStorage.setItem('my-store', '{"hello": "hello"}')
const state = useStorage('my-store', { hello: 'hi', greeting: 'hello' }, localStorage)
console.log(state.value.greeting) // undefined, since the value is not presented in storageこれを解決するには、`mergeDefaults` オプションを有効にします。
localStorage.setItem('my-store', '{"hello": "nihao"}')
const state = useStorage(
  'my-store',
  { hello: 'hi', greeting: 'hello' },
  localStorage,
  { mergeDefaults: true } // <--
)
console.log(state.value.hello) // 'nihao', from storage
console.log(state.value.greeting) // 'hello', from merged default valuelocalStorage.setItem('my-store', '{"hello": "nihao"}')
const state = useStorage(
  'my-store',
  { hello: 'hi', greeting: 'hello' },
  localStorage,
  { mergeDefaults: true },
)
console.log(state.value.hello) // 'nihao', from storage
console.log(state.value.greeting) // 'hello', from merged default valuetrue に設定すると、オブジェクトの **浅いマージ** が実行されます。 カスタムマージ (例: ディープマージ) を実行する関数を渡すことができます。例えば、
const state = useStorage(
  'my-store',
  { hello: 'hi', greeting: 'hello' },
  localStorage,
  { mergeDefaults: (storageValue, defaults) => deepMerge(defaults, storageValue) } // <--
)const state = useStorage(
  'my-store',
  { hello: 'hi', greeting: 'hello' },
  localStorage,
  {
    mergeDefaults: (storageValue, defaults) =>
      deepMerge(defaults, storageValue),
  },
)カスタムシリアライゼーション 
デフォルトでは、`useStorage` は、指定されたデフォルト値のデータ型に基づいて、対応するシリアライザをスマートに使用します。 例えば、オブジェクトには `JSON.stringify` / `JSON.parse`、数値には `Number.toString` / `parseFloat` などが使用されます。
`useStorage` に独自のシリアライズ関数を指定することもできます。
import { useStorage } from '@vueuse/core'
useStorage(
  'key',
  {},
  undefined,
  {
    serializer: {
      read: (v: any) => v ? JSON.parse(v) : null,
      write: (v: any) => JSON.stringify(v),
    },
  },
)import { useStorage } from '@vueuse/core'
useStorage('key', {}, undefined, {
  serializer: {
    read: (v) => (v ? JSON.parse(v) : null),
    write: (v) => JSON.stringify(v),
  },
})デフォルト値として `null` を指定すると、`useStorage` はデータ型を推測できません。 この場合、カスタムシリアライザを提供するか、組み込みのシリアライザを明示的に再利用できます。
import { StorageSerializers, useStorage } from '@vueuse/core'
const objectLike = useStorage('key', null, undefined, { serializer: StorageSerializers.object })
objectLike.value = { foo: 'bar' }型宣言 
型宣言を表示
export interface Serializer<T> {
  read: (raw: string) => T
  write: (value: T) => string
}
export interface SerializerAsync<T> {
  read: (raw: string) => Awaitable<T>
  write: (value: T) => Awaitable<string>
}
export declare const StorageSerializers: Record<
  "boolean" | "object" | "number" | "any" | "string" | "map" | "set" | "date",
  Serializer<any>
>
export declare const customStorageEventName = "vueuse-storage"
export interface StorageEventLike {
  storageArea: StorageLike | null
  key: StorageEvent["key"]
  oldValue: StorageEvent["oldValue"]
  newValue: StorageEvent["newValue"]
}
export interface UseStorageOptions<T>
  extends ConfigurableEventFilter,
    ConfigurableWindow,
    ConfigurableFlush {
  /**
   * Watch for deep changes
   *
   * @default true
   */
  deep?: boolean
  /**
   * Listen to storage changes, useful for multiple tabs application
   *
   * @default true
   */
  listenToStorageChanges?: boolean
  /**
   * Write the default value to the storage when it does not exist
   *
   * @default true
   */
  writeDefaults?: boolean
  /**
   * Merge the default value with the value read from the storage.
   *
   * When setting it to true, it will perform a **shallow merge** for objects.
   * You can pass a function to perform custom merge (e.g. deep merge), for example:
   *
   * @default false
   */
  mergeDefaults?: boolean | ((storageValue: T, defaults: T) => T)
  /**
   * Custom data serialization
   */
  serializer?: Serializer<T>
  /**
   * On error callback
   *
   * Default log error to `console.error`
   */
  onError?: (error: unknown) => void
  /**
   * Use shallow ref as reference
   *
   * @default false
   */
  shallow?: boolean
  /**
   * Wait for the component to be mounted before reading the storage.
   *
   * @default false
   */
  initOnMounted?: boolean
}
export declare function useStorage(
  key: string,
  defaults: MaybeRefOrGetter<string>,
  storage?: StorageLike,
  options?: UseStorageOptions<string>,
): RemovableRef<string>
export declare function useStorage(
  key: string,
  defaults: MaybeRefOrGetter<boolean>,
  storage?: StorageLike,
  options?: UseStorageOptions<boolean>,
): RemovableRef<boolean>
export declare function useStorage(
  key: string,
  defaults: MaybeRefOrGetter<number>,
  storage?: StorageLike,
  options?: UseStorageOptions<number>,
): RemovableRef<number>
export declare function useStorage<T>(
  key: string,
  defaults: MaybeRefOrGetter<T>,
  storage?: StorageLike,
  options?: UseStorageOptions<T>,
): RemovableRef<T>
export declare function useStorage<T = unknown>(
  key: string,
  defaults: MaybeRefOrGetter<null>,
  storage?: StorageLike,
  options?: UseStorageOptions<T>,
): RemovableRef<T>ソース 
貢献者 
変更履歴 
v12.0.0-beta.1 2024/11/21v11.0.1 2024/08/19v11.0.0-beta.2 2024/07/17v10.8.0 2024/02/20a086e - fix: より厳密な型v10.7.0 2023/12/05v10.6.0 2023/11/09v10.4.0 2023/08/25v10.0.0-beta.5 2023/04/13cb644 - refactor!: `isFunction` と `isString` ユーティリティを削除v10.0.0-beta.4 2023/04/134d757 - feat(types)!: `MaybeComputedRef` を `MaybeRefOrGetter` に名前変更0a72b - feat(toValue): `resolveUnref` を `toValue` に名前変更v9.13.0 2023/02/18v9.8.2 2022/12/20v9.8.1 2022/12/20c3851 - fix: 値を設定した後にウォッチを再開し、ループ更新を修正v9.3.1 2022/10/17