Vuex与Pinia的使用与其持久化以及两者之间的差别
admin
2024-04-21 11:08:35
0

vuex在vue3的简单使用

index.js文件import { createStore } from 'vuex'
export default createStore({state: {num: 10,sum:20,strValue:'这是vuex中的数据'},getters: {total(state) {return state.num+state.sum}},mutations: {changeNum(state,value) {state.num = value},},actions: {changeSum(context,value) { context.commit('changeNum',value)}},modules: {},
})

如何使用mutations中的方法以及何如使用actions中的方法请看index.vue组件


actions和mutitions的区别

actions和mutations都能够使用方法,那么他们的区别是什么,那我去查了很多贴子:无非就是说mutations中的方法是同步的,而actions中的方法是异步的,其实根据场景来使用吧,你想要程序按照顺序来执行,那么你就使用mutations,如果你这个数据不是很急着使用想要下面的先执行,那么你就可以使用actions
vuex中的state数据不允许直接赋值修改,所以vuex创建了mutations用于定义方法来修改state中的数据,但是只能同步修改。如果异步修改会造成调试工具跟实际数据不对应,所以vuex又提供了actions,用于异步触发mutations中的方法。
总结:mutations中的方法可以直接修改state数据,actions是异步执行mutations中的方法,所以它俩都可以改数据,区别是一个是同步一个是异步。

vuex持久化存储

yarn add vuex-persistedstate -s(使用这个插件)
持久化是存储到localStorage里面
如何去持久化呢:localStroage.removeItem(key)
只是说使用这么多的插件方便了一点点而已,自己写也可以写,只不过现在着实时间精力有限,先用着大佬写的。

import { createStore } from 'vuex'
import user from './modules/user'
import persistedState from 'vuex-persistedstate'
import * as Cookie from 'js-cookie'
export default createStore({state: {num: 10,sum:20,strValue:'这是vuex中的数据'},getters: {total(state) {return state.num+state.sum}},mutations: {changeNum(state,value) {state.num = value},},actions: {changeSum(context,value) { context.commit('changeNum',value)}},modules: { user },// 配置持久化plugins: [persistedState({// 这个key是存储的名称key: 'persisted-vuex',// 这个是需要持久化的模块paths: ['user'],})]
})
user模块export default {//开启名称空间确实对自己友好一点namespaced:true,state: {userInfo:'userInfo'},getters: {},mutations: {updateUserInfo(state, value) { state.userInfo=value}},actions: {UPDATE_USERINFO(context, value) { context.commit('updateUserInfo',value)}}
}

index.vue文件


pinia使用

并不是有了新技术就一定要用什么新技术吧,反正不断学习,自己判断,有时候最新的并不一点是最合适的。。。。。
pinia里面使用模块化是很方便的,不需要使用moudle,但是有一点需要注意的。自己看index文件,第二行注释。

index.jsimport { defineStore } from 'pinia'
//这里的storId不能够重复,不然直接没有数据,亲测。
export const useStore = defineStore('storId', {state: () => { return {counter: 0,num: 1,age:20,}},getters: {changeNum() { return this.num+120}},actions: {upCounter(val) { this.counter+=val},}
})user.jsimport { defineStore
} from "pinia";
export const userStore = defineStore('userID', {state: () => { return {username:'user.js文件'}}})
使用(index.vue文件)

Pinia数据持久化

普通的跟vuex差不多,localstroage,sessionstroage,Cookie里面
插件版本pinia-plugin-persistedstate(用这个插件)

together.js
import { createPinia } from "pinia";
import pinaPluginPersist from 'pinia-plugin-persistedstate'
const store = createPinia()
store.use(pinaPluginPersist)
export default store
index.jsimport { defineStore } from 'pinia'
export const useStore = defineStore('storId', {state: () => { return {counter: 0,num: 1,age:20,}},getters: {changeNum() { return this.num+120}},actions: {upCounter(val) { this.counter+=val},},// 启动持久化persist: {// 是否开启enabled: true,// 持久化策略// 存储名称key: 'useStroage',// 存储位置stroage:window.localStorage}
})我这里只在index文件中开了
user.jsimport { defineStore
} from "pinia";
export const userStore = defineStore('userID', {state: () => { return {username:'user.js文件'}}})

pinia与vuex的区别

1.vuex不可以直接修改state中的属性的值,需要通过mutations或者actions中的方法来修改。pinia可以使用storeToRefs()来直接修改,也可以通过store.$patch(state=>{})来批量修改属性值也是没有问题的。
2.pinia中没有mutations,可以直接通过store对象来输出方法。
OS:这应该是程序员为了偷懒写的插件啊哈哈哈哈,我猜是的。真的挺方便的。

相关内容

热门资讯

深圳地铁,回应争议 7月20日,深圳地铁全面落实安检全覆盖,新规首日全网客流达942.03万人次,相关话题持续登上本地社...
房地产板块异动拉升,珠江股份触... 7月22日,房地产板块异动拉升,珠江股份触及涨停,招商蛇口、滨江集团、特发服务、保利发展、万科A跟涨...
海关总署:加快实施“十五五”规... 7月22日,国务院新闻办举行新闻发布会,介绍贯彻落实“十五五”规划,加快推进海关现代化,服务贸易强国...
谷歌发布多款Gemini模型,... 7月22日,Alphabet旗下谷歌发布三款成本更低的Gemini人工智能模型,包括Gemini 3...
扬州轩元云意股权投资合伙企业成... 7月22日,天眼查显示,近日,扬州轩元云意股权投资合伙企业(有限合伙)成立,执行事务合伙人为上海轩元...
SK、三星和英伟达将聚首硅谷 7月22日,据报道,三星电子会长李在镕、SK集团会长崔泰源和Naver会长李海珍将在美国与英伟达首席...
【案例】林某某与江西某建筑公司... 基本案情 2020年12月18日至2020年12月26日林某某在江西某建筑公司的工地上从事木工工作,...
法国议会通过15岁以下未成年人... 目前全球范围内,社交媒体对未成年人健康和安全造成的影响的担忧日益加剧。 据路透社当地时间7月21日报...
海湾红海双线承压,美威胁打击“... 当地时间7月21日,美国中央司令部表示,为执行对伊朗的海上封锁,美军已迫使8艘商业船只改变航线,并使...
泽连斯基:决定任命德拉帕特为乌... 中新网7月22日电 综合外媒报道,当地时间21日,乌克兰总统泽连斯基宣布,他决定由米哈伊尔·德拉帕特...