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>
网友回复