pinia 笔记
创始人
2024-05-01 08:54:42
0

1、安装

    npm i pinia -S

2、创建store基本结构

1、在src下创建store文件夹并创建app.js文件,同时编写基本代码结构

// 引入实例化store的函数 
import { defineStore } from "pinia";// 实例出一个名为app的store,那appStore是什么?它代表当前这个store文件,下面会导出这整个写好的store供给其他页面使用
const appStore = defineStore("app", {// 存数据的state: () => {return {count: 1,};},// 计算属性getters: {},// 同/异步函数都在这里写actions: {},
});export default appStore;

2、到main.ts中全局注册一下pinia,这样整个项目都可以使用pinia的钩子函数了

// 引入
import { createPinia } from 'pinia'
// 实例化
const store = createPinia()
// 全局使用(在中间加即可)
createApp(App).use(store).mount('#app')

3、子页面如何使用store/app.js中的store数据

// 以HelloWorld.vue组件为例
// 引入store/app.js(也就是store文件夹下的app.js导出的整个store)
import AppStore from "../store/app";// 从app.js导出的整个store文件实例出一个hook store(名字自定义,大多以use开头)
const useAppstore = AppStore();// 标签中使用
// 注意:由于pinia在用defineStore实例出新store时是以对象的形式定义的,又因为store内部的值都是存储在自身proxy target值里,所以取值直接对象的形式获取使用

4、storeToRefs 赋予导出的store下的state数据为响应式proxy
上面的标签中使用数据未免有些不美观,数据一多就很难看

// 示例

同时如果在script中解构出的state数据是不具备响应式的

// 示例const { count } = useAppstore

但我们使用pinia状态管理主要就是为了让一个页面修改公用数据多个页面同个数据也跟着修改,所以storeToRefs登场啦

// 以HelloWorld.vue组件为例// 引入import { storeToRefs } from "pinia";  // 将我们实例化的useAppstore放进去然后解构,解构出的state数据即为响应式const { count } = storeToRefs(useAppstore);

5、怎么证明它就是响应式的,store名.$subscribe
 params: storeId这个参数为当前使用的store名称
 state: 这个是store内部的state数据,你可以通过它观察到该store的state内部的数据的更改状态
注意:定义完会自动调用,所以不需要主动调用

// 示例
const testSubscribe = userStore.$subscribe((params, state) => {console.log(params, "params");console.log(state, "state");
});

在这里插入图片描述

6、重置store中的所有state数据 this.$reset()

// 以app.js这个store为例actions: {resetData() {this.$reset()}}// 其他组件使用  以HelloWorld为例
/* AppStore这个是根据你引入的store实例化后的名称   import useAppStore from "../store/app";const AppStore = useAppStore();
*/const handReset = () => {AppStore.resetData()
}

7、不同store之间的数据互访

 例如在app.js的store中想要使用user.js的store中的数据count实现过程:1、在app store顶部引入user store      import userStore from "./user";2、在app中需要用到的地方将user store实例出一个对象useStore,直接useStore.count的取值方式即可拿到user store中的count值。提示:app可以获取整个user store中的所有东西(state,getters,actions)核心:1、引入第三方store  2、实例化引入store  3、直接使用app store下的actions中addCount() {const useStore = userStore();this.count += useStore.count;}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...