参考网址: https://github.com/vuejs/rfcs/pull/271
大致总结:
支持选项式api和组合式api写法
pinia没有mutations,只有:state、getters、actions
可以模拟模块化
import { defineStore } from 'pinia'
import { userStore } from '@/store/user'
export const useGlobalStore = defineStore('global', {
state(){
return {
user:userStore(),
}
}
})
TypeScript支持很好
自动化代码拆分
pinia体积更小(性能更好)
pinia可以直接修改state数据
pinia使用
具体使用:https://xuexiluxian.cn/blog/detail/242b0ed71feb412991f04d448fc86636 <script s
<script setup>
import { storeToRefs } from 'pinia'
import {useStore} from './store'
const store=useStore()
let{name,num,changeNum}=storeToRefs(store)
const changeName=()=>{
name.value='李四'//修改数据
// 也可以批量修改
store.$patch(state=>{
state.num++
state.name='炸雷'
})}
const btn=()=>{
store.upNum(200)}
//重置
const reset =()=>{
store.$reset()}
</script>
store.js
import { defineStore } from 'pinia'
export const useStore = defineStore('storeId', {
state: () => {
return {
num: 0,
name: 'Eduardo',
}
},
getters:{
changeNum(){
console.log('getters')
return this.num+1000
}
},
actions:{
upNum(val){
this.num+=val
}
}
})
也可以写成
export const user=defineStore({
id:'user',
state:()=>{}
})
pinia的持久化存储
参考链接:https://xuexiluxian.cn/blog/detail/acebacd99612447e8c80dcf6354240f6
重置
状态管理(pinia)
1 vuex和pinia区别:
1> pinia是没有mutations、modules
不过,pinia没有modules我们在项目中也会模拟一个global文件来进行管理
2> pinia的actions可以直接返回同步/异步,组件是可以直接使用这个值的
vuex如果使用mutations直接返回一个值,那么是不可以在组件使用的,必须赋值给state
3> 修改state值的问题
pinia可以直接state的值
vuex也可以修改,但是要修改源头==》this.$store.state.xxx
***注意:不能直接修改mapState的"克隆值"
pinia或vuex中使用mapState是不可以直接修改值的
但是pinia中有:mapWritableState
相关作者
- 获取点赞0
- 文章阅读量264
评论()