Skip to content

18 - 实现本地存储 #2964

Open
Open
@liaohui5

Description

@liaohui5

最简单的做法, 使用自定义 ref

<script setup lang="ts">
import { ref, computed, customRef } from "vue";

function useLocalStorage(key: string, initialValue: any) {
  return customRef((track, trigger) => {
    return {
      get() {
        track();
        const storedValue = localStorage.getItem(key);
        if (storedValue === null) {
          localStorage.setItem(key, JSON.stringify(initialValue));
          return initialValue;
        }
        return JSON.parse(storedValue);
      },
      set(newValue: any) {
        trigger();
        localStorage.setItem(key, JSON.stringify(newValue));
      },
    };
  });
}

const counter = useLocalStorage("counter", 0);

console.log(counter.value);
const update = () => counter.value++;
</script>

<template>
  <p>Counter: {{ counter }}</p>
  <button @click="update">Update</button>
</template>

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions