首页 > 其他分享 >pinia学习

pinia学习

时间:2022-11-24 10:33:20浏览次数:59  
标签:count const 学习 state pinia import store

1.安装

yarn add pinia
OR 使用npm
npm install pinia

pinia是Vue的存储库,允许跨组件/页面共享状态。
pinia和vuex的作用一样,充当一个存储数据的作用,存储在pinia的数据允许我们在各个组件中使用。

pinia优点:
1.pinina只有state,getter,action。
2.pinia中action支持同步和异步,vuex不支持【vue2中action是异步的去commit操作,而mutations是同步的】。
3.良好的Typescript支持
4.无需创建各个模块嵌套,pinia中每个store都是独立的,互相不影响。
5.体积非常小,只有1kb左右
6.pinia支持插件来扩展自身功能
7.支持服务端渲染

2.创建一个pinia实例(根store)并将其传递给应用

import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'

const pinia = createPinia();
const app = createApp(App);

app.use(pinia);
app.mount('#app');

3.Store

store 是一个保存状态和业务逻辑的实体。
有三个概念: state, getter, action。

4.创建一个store例子

// stores/count.js
store 是用 defineStore() 定义的,他的第一个参数要求是一个独一无二的名字:
import { defineStore } from 'pinia';

export const useCountStore = defineStore('main',{
// 其他配置...
state:()=>({
count: 0
}),
getters:{
double: (state)=>state.count * 2
},
actions: {
increment(){
this.count++;
}
}
})

使用方式:
//some.vue
<script setup>
import useCountStore from '@/stores/count'
import { computed } from 'vue'
import {storeToRefs} from 'pinia';//为了从store中提取属性时保持其响应式,需要引入 storeToRefs

const counter = useCountStore();
const { count } = storeToRefs(counter);
const { increment } = counter;

counter.count++;
counter.increment();
//OR
counter.$patch({ count: counter.count+1 })

const doubleCount = computed(()=> counter.count * 2);

</script>

 5.重置state

调用 store的 $reset()方法将state重置为初始值。

例如:
const store = useStore();
store.$reset();

 6.举例demo

项目搭建
执行命令:
npm create vite@latest my-vite-app --template vue-ts

运行项目:
npm install
npm run dev

安装pinia(见上文)
npm install pinia

修改main.js,引入pinia提供的createPinia方法,创建根存储。
//main.ts
import { createApp } from 'vue';
import App from './App.vue'
import { createPinia } from 'pinia';
const pinia = createPinia();

const app = createApp(App);
app.use(pinia);
app.mount('#app');

在src目录下新建store文件夹,用来存放创建的各种store,然后在该目录下新建 user.ts 文件,主要用来存放与user相关的store。
//例如:src/store/user.ts
import { defineStore } from 'pinia';

export const userStore = defineStore('user',{
state:()=>({
userInfo:{
name: 'sunnyeve',
age: 18
},
sayHello: 'hello world',
count: 0,
items: []
}),
getters:{ //相当于computed,作用是返回一个新的结果,会被缓存
getDoubleAge:(state)=>{
return state.age * 2;
},
getUserInfo():string{
return this.name + this.getDoubleAge
}
},
actions:{
changeName(name: string){
this.name = name;
}
}
})

//使用store, /src/views/home.vue
<template>
<div>sayhello: {{sayHello}}</div>
<div>{{userInfo.name}}</div>
<div>{{userInfo.age}}</div>
<button @click='changeAge'>点击更改age</button>
<button @click='reset'>重置store</button>
<button @click='patchStore'>批量更改数据</button>
</template>
<script setup lang="ts">
import { userStore } from '@/store/user';
import { storeToRefs } from 'pinia';

const useUserStore = userStore();
const { userInfo, count, sayHello } = storeToRefs(useUserStore);
const changeAge = ()=>{
useUserStore.age++;
}
const reset = ()=>{
useUserStore.$reset();//这个方法会将store中的数据变为初始状态,页面也会更新。
}
const patchStore=()=>{
useUserStore.$patch({
count: 10,
sayHello: 'hello world~~~'
})
}
//也可下面这种写法,原因在于假设state中有些字段无需更改,就可以用$patch方法接收一个回调函数方式解决
useUserStore.$patch((state)=>{
state.items.push({name:'xx', price: 100});
state.hasChanged = true
})
//直接替换整个store, 使用store的$state方法
useUserStore.$state = { name: 'xx', age: 18}
</script>

 

参考链接:

   https://pinia.vuejs.org/zh/getting-started.html  - 官方文档

    https://zhuanlan.zhihu.com/p/533233367

 

标签:count,const,学习,state,pinia,import,store
From: https://www.cnblogs.com/sunnyeve/p/16915858.html

相关文章

  • mybatis学习第⼗⼀部分:mybatis使用到的设计模式
    虽然我们都知道有3类23种设计模式,但是⼤多停留在概念层⾯,Mybatis源码中使⽤了⼤量的设计模式,观察设计模式在其中的应⽤,能够更深⼊的理解设计模式Mybatis⾄少⽤到了以下的设......
  • fastapi学习
    Get请求fromfastapiimportFastAPIapp=FastAPI()@app.get("/items/{item_id}")asyncdefread_root(item_id:int):return{"item_id":item_id}#在最......
  • fastapi学习之路
    一、python3写一个http接口服务,给别人调用3这次选择fastapi,FastAPI是一个现代的、快速(高性能)的web框架,用于基于标准Python类型提示使用Python3.6+构建api。具有快速......
  • 深度学习之一致性评价方法
    1.一致性评价方法线性相关系数(Pearson相关)(定量变量)  kappa相关系数(分类数据)  kappa系数(评价者为两人)计算方法:    Fleiss'kappa评价系数(多个评价者存......
  • C++零基础入门学习路线图
    C++入门学习路线图分为三阶段:C++基础入门、C++核心编程、C++提高编程。以下学习路线图参考B站黑马程序员《匠心精作C++从0到1入门编程》C++基础入门 1C++初识 ......
  • Docker学习笔记七:Docker提交镜像到阿里云仓库
    一、准备1、开启阿里云镜像仓库a.访问阿里云地址并登陆地址:http://cr.console.aliyun.comb.选择“容器镜像服务”c.使用“个人实例”构建仓库d.创建命名空......
  • C++全栈开发学习路线图
    C语言基础与提高 C语言基础 指针、内存管理 变量、条件、字符串、数组、函数、结构体 C语言提高 多级指针的使用 接口的封......
  • 今日内容 爬虫简单学习
    爬虫介绍#爬虫:spider,网络蜘蛛#本质原理: -现在所有的软件原理:大部分都是基于http请求发送和获取数据的 -pc端的网页-移动端app-模拟发送http......
  • 合宙Air系列开发板官方demo学习(二):camera - 摄像头:(1)-capture
    基础资料基于Air105开发板:Air105-LuatOS文档上手:开发上手-LuatOS文档探讨重点对官方camera-摄像头demo中capture功能的复现,进行相关内容的学习及探讨。实现功......
  • 软件技术基础学习笔记(3)——合作完成一个电梯演讲视频
    软件技术基础https://edu.cnblogs.com/campus/zjlg/22rjjc这个作业的目标<二人合作完成一个电梯演讲>姓名-学号<卢昕豪>-<2020330301200>姓名-学号<王康......