面试题答案
一键面试常用方法
- 使用
localStorage
:localStorage
可以在浏览器端持久化存储数据,关闭页面后数据依然存在。将Pinia中的状态数据存储到localStorage
,在应用初始化时再从localStorage
读取并设置到Pinia状态中。 - 使用
sessionStorage
:与localStorage
类似,但sessionStorage
中的数据在页面会话结束时(关闭标签页)会被清除。
代码示例(以localStorage
为例)
- 安装依赖:
- 如果项目还没有安装Pinia,先安装Pinia:
npm install pinia
- 如果项目还没有安装Pinia,先安装Pinia:
- 创建Pinia store并实现数据持久化:
- 创建一个
store.js
文件,例如:
- 创建一个
import { defineStore } from 'pinia';
export const useCounterStore = defineStore('counter', {
state: () => ({
count: 0
}),
actions: {
increment() {
this.count++;
}
},
// 在store定义时,从localStorage读取数据
// 如果localStorage中有数据,就使用其初始化状态
// 如果没有,就使用默认的state
// 在actions中更新状态后,同步更新localStorage
// 这里简单示例在increment方法中更新localStorage
setup() {
const storedCount = localStorage.getItem('counter');
if (storedCount) {
this.count = JSON.parse(storedCount);
}
},
afterEachAction(ctx) {
if (ctx.name === 'increment') {
localStorage.setItem('counter', JSON.stringify(this.count));
}
}
});
- 在Vue组件中使用:
<template>
<div>
<p>Count: {{ counterStore.count }}</p>
<button @click="counterStore.increment">Increment</button>
</div>
</template>
<script setup>
import { useCounterStore } from './store';
const counterStore = useCounterStore();
</script>
在上述代码中,setup
钩子函数在store创建时从localStorage
读取数据初始化count
状态。afterEachAction
钩子函数在increment
操作执行后将最新的count
值存储到localStorage
中。这样就实现了Pinia状态数据的持久化。如果使用sessionStorage
,只需要将localStorage
替换为sessionStorage
即可。