安装
1 | npm i pinia |
定义 store
1 | // src/store/index.js |
使用 pinia
1 | // src/main.js |
在页面中使用 store
1 | <template> |
解构 Store
1 | <template> |
修改 Pinia 数据状态
简单数据修改
简单数据直接通过在方法中操作store.属性名
来修改
1 | <template> |
多条数据修改
通过store.属性名
的方式逐行修改是可以的,但是 pinia 官网推荐使用$patch
来修改多条数据。
$patch
接受两个类型的参数,分别为对象和函数
- $patch + 对象
- $patch + 函数:通过函数方式去使用的时候,函数接受一个 state 的参数,state 就是 store 仓库中的 state
1 | <template> |
通过 action 修改数据
在 store.actions 中添加一个changeState
方法。
1 | import { defineStore } from 'pinia' |
在组件中使用store.方法名
的方式调用该方法
1 | <template> |
Pinia 中的 getters
Pinia 中的 getter 和 Vue 中的计算属性几乎一样,在获取 State 值之前做一些逻辑处理。
- getter 中的值有缓存特性,如果值没有改变,多次使用也只会调用一次
添加 getter 方法
1 | import { defineStore } from 'pinia' |
组件内多次调用 getter
1 | <template> |
打开浏览器控制台我们发现,多次调用同一个 getter 函数的时候,只会执行一次,说明 getter 是具有缓存性的。
- getter 中不仅可以传递
state
直接改变数据状态,还可以使用this
来改变数据
1 | mport { defineStore } from 'pinia' |
store 之间的相互调用
我们定义一个新的 store
1 | import { defineStore } from 'pinia' |
在mainStore
中引入使用我们上面刚刚定义好的bookStore
1 | import { defineStore } from 'pinia' |
在组件中使用
1 | <template> |