总结:
在store文件夹中建一个pinia的文件userStore.js
1.要想使用pinia必须先引入defineStore 这里我们使用es6的模块化语法导出的
import { defineStore } from 'pinia'
2.然后使用export const useUserStore = defineStore('user',{})
defineStore 方法有两个参数,第一个参数是模块化名字(也就相当于身份证一样,不能重复
第二个参数是选项,对象里面有三个属性,相比于vuex 少了一个 mutations
3.state(){return{ }} 是一个函数返回一个对象,对象里面就是可以共享的状态
4.getters:{ } 是一个对象,可以定义类型计算数据的函数,直接用来当变量使用相当于vue里面的计算属性,可以缓存数据
5.actions:{ } 是一个对象,可以定义方法修改state里面的数据可以是异步,也可以是同步
在components中建一个User.vue文件
1.引入import { useUserStore } from '../store/userStore'
2.值得注意的是useUserStore是一个 方法,调用之后会给我们返回一个对象,这个时候页面上就能正常显示我们在userStore.js里面的state里面定义的firstName、lastName、gender、age
const user = useUserStore()
userStore.js
// 要想使用pinia必须先引入defineStore 这里我们使用es6的模块化语法导出的
import { defineStore } from 'pinia'
// defineStore 方法有两个参数,第一个参数是模块化名字(也就相当于身份证一样,不能重复)
// 第二个参数是选项,对象里面有三个属性,相比于vuex 少了一个 mutations
export const useUserStore = defineStore('user', {
// 定义共享状态
state() { //是一个函数返回一个对象,对象里面就是可以共享的状态
return {
firstName: '张',
lastName: '三',
gender: '女',
age:12
}
},
// getters是一个对象,可以定义类型计算数据的函数,直接用来当变量使用
// 相当于vue里面的计算属性,可以缓存数据
getters: {
fullName() {
return this.firstName+this.lastName+this.age
}
},
// actions 是一个对象,可以定义方法修改state里面的数据
// 可以是异步,也可以是同步
actions: {
changeFirstName(payload) {
this.firstName = payload
},
changeLastName(payload) {
this.lastName = payload
},
changeAge(payload) {
setTimeout(() => {
this.age = payload
},3000)
}
}
})
User.vue文章来源:https://www.toymoban.com/news/detail-614127.html
<template>
<h1>修改用户信息</h1>
<input type="text" v-model="firstName">
<button @click="updatefirst">修改firstName</button>
<input type="text" v-model="lastName">
<button @click="updateLast">修改lastName</button>
<input type="text" v-model="age">
<button @click="updateAge">修改age</button>
{{ user.fullName}}
<hr>
{{ user.firstName }}
{{ user.lastName }}
{{ user.gender }}
{{ user.age }}
</template>
<script setup>
import { ref, reactive } from 'vue';
import { useUserStore } from '../store/userStore'
// 值得注意的是useUserStore是一个 方法,调用之后会给我们返回一个对象
// 这个时候页面上就能正常显示我们在userStore.js里面的state里面定义的firstName、lastName、gender、age
const user = useUserStore()
const firstName = ref('')
const lastName = ref('')
const age = ref('')
// 定义一个方法
const updatefirst=() => {
user.changeFirstName(firstName.value)
}
const updateLast = () => {
user.changeLastName(lastName.value)
}
const updateAge = () => {
user.changeAge(age.value)
}
</script>
<style scoped>
</style>
文章来源地址https://www.toymoban.com/news/detail-614127.html
到了这里,关于pinia在vue3中的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!