pinia在vue3中的使用

总结:

在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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值