• pinia安装使用


    pinia中文文档

    目录

    一.pinia简介

    二. pinia安装

     三.pinia使用

    1.main.js中创建pinia实例

    2.创建store状态库

    定义state

    state的读写

    state响应式解构

    state的修改

    Getters的使用

    Pinia中Store的互相调用


    一.pinia简介

    Pinia是vue生态里Vuex的替代者,一个全新的vue状态管理库。
    Pinia·是·Vue 的存储库,它允许您跨组件/页面共享状态
    (让你可以在页面间实现数据的共享)
     

    二. pinia安装

    npm install pinia
    

    package.json包中含有pinia

     三.pinia使用

    1.main.js中创建pinia实例

    1. import { createApp } from 'vue'
    2. import App from './App.vue'
    3. import {createPinia} from 'pinia'
    4. const app = createApp(App)
    5. app.use(createPinia())
    6. app.mount('#app')

    2.创建store状态库

    在src目录下创建一个store包

    store下建user.js

    定义state

    state是pinia的核心,是存储数据的地方,例如我们要存储一个user对象

    1. import {defineStore} from 'pinia'
    2. import {ref} from "vue";
    3. //第一种写法
    4. export default defineStore('first',()=>{
    5. const name=ref('name')
    6. const age=ref(12)
    7. return {name,age}
    8. })
    9. //第二种写法
    10. export default defineStore('user',{
    11. state:()=>{
    12. return {
    13. name:'name',
    14. age:12
    15. }
    16. }
    17. })

    state的读写

    1. <template>
    2. <a>{{userStore.name}}</a>
    3. <input type="text" v-model="userStore.name">
    4. </template>
    5. <script setup>
    6. import { toRef } from '@vue/reactivity'
    7. import user from '../store/user.js'//引入state
    8. const userStore = user()
    9. console.log(userStore.name)
    10. </script>
    11. <style>
    12. </style>

     当我们更改表单中的数据时,前面的字符也会跟着改变,这种改变是通过更改状态库的数据而进行改变的

    state响应式解构

    const {name,age} = StoreToRefs(userStore())
    

    state的修改

    使用patch修改

    1. const handleClickPatch = () => {
    2. userStore.$patch((state)=>{
    3. userStore.name='小明'
    4. })
    5. }

    先在store中写好action方法,再调用action

    action中方法的创建

    1. actions: {
    2. changeState(){
    3. this.age++
    4. this.name = 'change helloPinia!!!'
    5. }
    6. }

    action中方法的调用

    1. const handleClickActions = ()=>{
    2. userStore.changeState()
    3. }

    Getters的使用

    计算属性,可以对state进行计算操作,它就是Store的计算属性,虽然在组件内也可以做计算属性,但是geetters可以在多组件之间复用,如果一个状态只在一个组件内使用是可以不用getters

    例如

    1. import {defineStore} from 'pinia'
    2. import {ref} from "vue";
    3. export default defineStore('first',{state:()=>{
    4. const name=ref('name')
    5. const age=ref(12)
    6. return {name,age}
    7. },
    8. getters:{
    9. ageAdd(state){
    10. return this.age++
    11. }
    12. },
    13. action:{
    14. }
    15. })

     这样,ageAdd可以直接通过store.ageAdd调用

    例如

    <a>{{userStore.ageAdd}}a>

    Pinia中Store的互相调用


    在上面代码中我们一直只使用了一个Store仓库,在真实项目中我们往往是有多个Store的。有多个Stroe时,就会涉及Store内部的互相调用问题。

    第一步:新建一个Store仓库
    在\src\store下新建一个Hyy.ts文件:

    1. import { defineStore } from 'pinia'
    2. export const hyyStore = defineStore("hyyStore", {
    3.     state:() =>
    4.         return {
    5.             list:["黄黄","小黄","黄小黄"]
    6.         } 
    7.     },
    8.     getters: {
    9.     },
    10.     actions: {
    11.     }
    12. })


    这是一个非常简单的仓库,只有state(状态数据),需要注意的是ID要是唯一的。有了这个仓库后,就可以回到index.ts这个仓库中调用了。

    第二步:先引入Hyy这个store。

    import { hyyStore } from './hyy'


    第三步:然后在actions部分加一个getList( )方法。
    这部分就写的很简单了,只是用console.log( )打印到控制台 上就可以了。

    1. actions: {
    2.     changeState(){
    3.         this.count++
    4.         this.helloPinia = 'change helloPinia!!!'
    5.     },
    6.     getList(){
    7.         console.log(hyyStore().list)
    8.     }
    9. }



    这样就实现了两个store中互相调用。

  • 相关阅读:
    LeetCode-剑指35-复杂链表的复制
    学生邮箱白嫖/免费安装JetBrains全家桶(IDEA/pycharm等) —— 保姆级教程
    在Spring中使用Redis
    ChatGPT的原理与前端领域实践
    vue3+ts+element 前端实现分页
    详细解读-Spring响应处理
    kubernetes组件再认知
    Postman的接口测试和持续集成——接口测试方法论
    Nginx配置中root和alias分不清?本文3分钟帮你解惑!
    工业网络通讯技术的发展历程
  • 原文地址:https://blog.csdn.net/m0_63263973/article/details/128121603