+
80
-

vuex与pina如何实现store持久化?

vuex与pina如何实现store持久化?


网友回复

+
0
-

参考这个代码 点击打开链接

+
0
-

pinia参考这个:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">



</head>

<body>
    <div id="app">
        <p>
            Counter: {{ store.counter }} Double: {{ store.double }}
        </p>
        <button @click="store.increment">Increment</button>
    </div>

    <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/vue3.2.22.js"></script>
    <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/VueDemi.js"></script>
    <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/pinia.js"></script>
    <script>
        const useStore = Pinia.defineStore({
          id: 'main',
          state: () => ({
            counter: 0 }),
        
          getters: {
            double: state => state.counter * 2 },
        
          actions: {
            increment() {
              this.counter++;
            } } });
        
        
        // 创建自定义插件
function createCustomPersistPlugin(options = {}) {
  return ({ store }) => {
    // 在插件初始化时从自定义存储引擎中加载状态
    const persistedState = loadFromCustomStorage(options.key);

    if (persistedState) {
      // 将加载的状态应用到store
      store.$patch(persistedState);
    }

    // 监听store的状态变化,将变化后的状态保存到自定义存储引擎
    store.$subscribe((mutation, state) => {
      saveToCustomStorage(options.key, state);
    });
  };
}

function loadFromCustomStorage(key) {
  const persistedState = localStorage.getItem(key);
  return persistedState ? JSON.parse(persistedState) : null;
}

function saveToCustomStorage(key, state) {
  localStorage.setItem(key, JSON.stringify(state));
}

// 加载Pina插件
const customPersistPlugin = createCustomPersistPlugin({
  key: 'myCustomStorageKey', // 设置自定义存储引擎的键
});

        
        const pinia = Pinia.createPinia();
        pinia.use(customPersistPlugin); //
        const App = {
          setup() {
            const store = useStore();
            return { store };
          } };
        
        
        const app = Vue.createApp(App).use(pinia);
        
        app.mount('#app');
    </script>



</body>

</html>

我知道答案,我要回答