227 lines
4.1 KiB
Markdown
227 lines
4.1 KiB
Markdown
|
|
<div align="center">
|
|||
|
|
<img width="200px" height="200px" src="https://gitee.com/dishait/pinia-plugin-unistorage/raw/main/static/favicon.png" />
|
|||
|
|
<h1>pinia-plugin-unistorage</h1>
|
|||
|
|
<p>uniapp 下 pinia 的本地数据缓存插件</p>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<br />
|
|||
|
|
<br />
|
|||
|
|
|
|||
|
|
<div align="center">
|
|||
|
|
<img width="100%" height="100%" src="https://gitee.com/dishait/pinia-plugin-unistorage/raw/main/static/pinia-plugin-unistorage.gif" />
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<br />
|
|||
|
|
<br />
|
|||
|
|
|
|||
|
|
## 引用
|
|||
|
|
|
|||
|
|
该插件是
|
|||
|
|
[pinia-plugin-persistedstate](https://github.com/prazdevs/pinia-plugin-persistedstate)
|
|||
|
|
的 `uniapp` 版本,如果你需要在纯 `vue` 或者 `nuxt` 项目中使用 `pinia`
|
|||
|
|
的本地数据缓存,请使用
|
|||
|
|
[pinia-plugin-persistedstate](https://github.com/prazdevs/pinia-plugin-persistedstate)。
|
|||
|
|
|
|||
|
|
<br />
|
|||
|
|
<br />
|
|||
|
|
|
|||
|
|
## 动机
|
|||
|
|
|
|||
|
|
为了实现多端的更简单的全局本地数据缓存
|
|||
|
|
|
|||
|
|
<br />
|
|||
|
|
<br />
|
|||
|
|
|
|||
|
|
## 组织 🦔
|
|||
|
|
|
|||
|
|
欢迎关注 **帝莎编程**
|
|||
|
|
|
|||
|
|
- [官网](http://dishaxy.dishait.cn/)
|
|||
|
|
- [Gitee](https://gitee.com/dishait)
|
|||
|
|
- [Github](https://github.com/dishait)
|
|||
|
|
- [网易云课堂](https://study.163.com/provider/480000001892585/index.htm?share=2&shareId=480000001892585)
|
|||
|
|
|
|||
|
|
<br />
|
|||
|
|
<br />
|
|||
|
|
|
|||
|
|
## 使用
|
|||
|
|
|
|||
|
|
### 安装
|
|||
|
|
|
|||
|
|
#### 1. `cli` 创建的 `uniapp` 项目
|
|||
|
|
|
|||
|
|
```shell
|
|||
|
|
npm i pinia-plugin-unistorage -D
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
```js
|
|||
|
|
// main.js
|
|||
|
|
import { createSSRApp } from "vue";
|
|||
|
|
import * as Pinia from "pinia";
|
|||
|
|
import { createUnistorage } from "pinia-plugin-unistorage";
|
|||
|
|
|
|||
|
|
export function createApp() {
|
|||
|
|
const app = createSSRApp(App);
|
|||
|
|
|
|||
|
|
const store = Pinia.createPinia();
|
|||
|
|
|
|||
|
|
// 关键代码 👇
|
|||
|
|
store.use(createUnistorage());
|
|||
|
|
|
|||
|
|
app.use(store);
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
app,
|
|||
|
|
Pinia, // 此处必须将 Pinia 返回
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
<br />
|
|||
|
|
|
|||
|
|
#### 2. `hbuilderx` 创建的 `uniapp` 项目
|
|||
|
|
|
|||
|
|
直接插件市场安装后引入注册
|
|||
|
|
|
|||
|
|
```js
|
|||
|
|
// main.js
|
|||
|
|
import { createSSRApp } from "vue";
|
|||
|
|
import * as Pinia from "pinia";
|
|||
|
|
import { createUnistorage } from "./uni_modules/pinia-plugin-unistorage";
|
|||
|
|
|
|||
|
|
export function createApp() {
|
|||
|
|
const app = createSSRApp(App);
|
|||
|
|
|
|||
|
|
const store = Pinia.createPinia();
|
|||
|
|
|
|||
|
|
// 关键代码 👇
|
|||
|
|
store.use(createUnistorage());
|
|||
|
|
|
|||
|
|
app.use(store);
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
app,
|
|||
|
|
Pinia, // 此处必须将 Pinia 返回
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 基础
|
|||
|
|
|
|||
|
|
```js
|
|||
|
|
import { defineStore } from "pinia";
|
|||
|
|
|
|||
|
|
export const useStore = defineStore("main", {
|
|||
|
|
state() {
|
|||
|
|
return {
|
|||
|
|
someState: "hello pinia",
|
|||
|
|
};
|
|||
|
|
},
|
|||
|
|
unistorage: true, // 开启后对 state 的数据读写都将持久化
|
|||
|
|
});
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
或者 `setup` 语法也是支持的
|
|||
|
|
|
|||
|
|
```js
|
|||
|
|
import { defineStore } from "pinia";
|
|||
|
|
|
|||
|
|
export const useStore = defineStore(
|
|||
|
|
"main",
|
|||
|
|
() => {
|
|||
|
|
const someState = ref("hello pinia");
|
|||
|
|
return { someState };
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
unistorage: true, // 开启后对 state 的数据读写都将持久化
|
|||
|
|
},
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
<br />
|
|||
|
|
|
|||
|
|
### 选项
|
|||
|
|
|
|||
|
|
#### 钩子
|
|||
|
|
|
|||
|
|
```js
|
|||
|
|
import { defineStore } from "pinia";
|
|||
|
|
|
|||
|
|
export const useStore = defineStore("main", {
|
|||
|
|
state() {
|
|||
|
|
return {
|
|||
|
|
someState: "hello pinia",
|
|||
|
|
};
|
|||
|
|
},
|
|||
|
|
unistorage: {
|
|||
|
|
// 初始化恢复前触发
|
|||
|
|
beforeRestore(ctx) {},
|
|||
|
|
// 初始化恢复后触发
|
|||
|
|
afterRestore(ctx) {},
|
|||
|
|
},
|
|||
|
|
});
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
<br />
|
|||
|
|
|
|||
|
|
#### 序列化
|
|||
|
|
|
|||
|
|
大多数情况下你并不需要了解该选项
|
|||
|
|
|
|||
|
|
```js
|
|||
|
|
import { defineStore } from "pinia";
|
|||
|
|
|
|||
|
|
export const useStore = defineStore("main", {
|
|||
|
|
state() {
|
|||
|
|
return {
|
|||
|
|
someState: "hello pinia",
|
|||
|
|
};
|
|||
|
|
},
|
|||
|
|
unistorage: {
|
|||
|
|
serializer: {
|
|||
|
|
// 序列化,默认为 JSON.stringify
|
|||
|
|
serialize(v) {
|
|||
|
|
return JSON.stringify(v);
|
|||
|
|
},
|
|||
|
|
// 反序列化,默认为 JSON.parse
|
|||
|
|
deserialize(v) {
|
|||
|
|
return JSON.parse(v);
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
});
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
<br />
|
|||
|
|
|
|||
|
|
#### 其他
|
|||
|
|
|
|||
|
|
```js
|
|||
|
|
import { defineStore } from "pinia";
|
|||
|
|
|
|||
|
|
export const useStore = defineStore("main", {
|
|||
|
|
state() {
|
|||
|
|
return {
|
|||
|
|
foo: "foo",
|
|||
|
|
nested: {
|
|||
|
|
data: "nested pinia",
|
|||
|
|
},
|
|||
|
|
someState: "hello pinia",
|
|||
|
|
};
|
|||
|
|
},
|
|||
|
|
unistorage: {
|
|||
|
|
key: "foo", // 缓存的键,默认为该 store 的 id,这里是 main,
|
|||
|
|
paths: ["foo", "nested.data"], // 需要缓存的路径,这里设置 foo 和 nested 下的 data 会被缓存
|
|||
|
|
},
|
|||
|
|
});
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
<br />
|
|||
|
|
<br />
|
|||
|
|
|
|||
|
|
## License
|
|||
|
|
|
|||
|
|
Made with [markthree](https://github.com/markthree)
|
|||
|
|
|
|||
|
|
Published under [MIT License](./LICENSE).
|