pinia 笔记
创始人
2024-05-01 10:36:03

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;}

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
篮球运球基本功 篮球运球动作要... 篮球是初中男生们最为喜爱的体育项目之一,甚至部分学生的篮球水平很高,但是平时打球多,并不意味着就一定...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
回归分析结果怎么看 spss回... 性研究领域,无论是现况调查、病例对照研究、还是队列研究,经常遇到分类的健康结局,包括二分类(如:生存...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...