pinia的基本使用

2023-11-17

npm install pinia //安装pinia

import { createPinia } from 'pinia' 
app.use(createPinia()) //main.js中使用pinia

//新建一个store文件夹 类似于vuex
// src/store/index.js
import { defineStore } from 'pinia'

const mainStore = defineStore('main', {
    state: () => {
        count: 0    
    },
    getters: {},
    actions: {}
})

export default mainStore

//使用store
import { mainStore } from '../store/index'
const store = mainStore()

<template>
    {{store.count} 
</template>

//由于store是一个对象 可以直接解构
const { count } = mainStore()
//在模板中直接就可以用count渲染数据 但是由于这样解构的数据不是响应式的 即使数据发生了变化 也不会在界面重新渲染 需要引入一个函数
import { storeToRefs } from 'pinia'
const { count } = storeToRefs(mainStore()) //这样count就是响应式了

//简单的数据修改
const store = mainStore()
store.count++; //官网推荐使用$patch方法修改数据 提高性能
//1.对象方式
store.$patch({
    count: store.count++
})
//2.函数方式
store.$patch((state) => {
    state.count++
})

//通过actions修改数据
const mainStore = defineStore('main', {
    state: () => {
        return {
            count: 0        
        }    
    },
    actions: {
        countIncrement(payload) {
            this.count++
            console.log(payload)        
        }    
    }
})
//调用actions方法
const store = mainStore()
store.countIncrement('payload')

//getter方法
const mainStore = defineStore('main', {
    state: () => {
        return {
            count: 0        
        }    
    },
    getters: {
        doubleCount(state) {
            return state.count * 2 //并且getter有缓存 多次调用只会执行一次        
        //不仅可以用state修改数据 还可用this this.count * 2
        }    
    }
})
//调用getter
{{store.doubleCount}}

//store中的相互调用

//1.新建另一个store
import { defineStore } from 'pinia'
const fooStore = defineStore('foo', {
    state: () => {
        return {
            mvList: []        
        }    
    }
})
export default fooStore
//2.在mainStore中引用fooStore
import fooStore from 'import fooStore from './foo'
const mainStore = defineStore('main', {
    getters: {
        getMvList() {
            return fooStore().mvList //获取到另外一个store的数据                        
        }    
    }
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pinia的基本使用 的相关文章