阅读量:0
1、首先pinia可以自己后面按需安装,也可在项目创建时去勾选安装(这里我使用的是项目创建时自动安装的,吃了点亏,忘记这里是组合写法了)
min.ts
import './assets/main.css' import { createApp } from 'vue' import { createPinia } from 'pinia' import App from './App.vue' const app = createApp(App) //将pinia安装为插件 app.use(createPinia()) app.mount('#app')
store文件夹中的counter.ts (名字任起)
import { ref, computed } from 'vue' // 引入defineStore import { defineStore } from 'pinia' // 创建实例并暴露 export const useStore = defineStore('counter', () => { const num= ref(0) const doubleNew = computed(() => num.value * 2) function increment() { num.value++ } return { num, doubleNew , increment } })
按照这个写法是不需要添加pinia核心(state、actions、getters),但需要return!!
在组件中直接使用即可,如下图
//<div> //累计完成<span>{{ num }}</span>元 //</div> // 引入pinia import {useStore} from "@/stores/counter" import { storeToRefs } from "pinia"; // 获取pinia的state模块 const store = useStore() //解决数据响应式 const {num, doubleCount} = storeToRefs(store); //方法需单独解构 const {increment} = store;
2、自定义安装pinia。
// 引入defineStore import { defineStore } from 'pinia' // 创建实例并暴露 export const useStore = defineStore('counter', { state:() =>{ return{ num:10 } }, actions:{ function increment(state) { state.num-- } }, getters:{ newNum:(state){ state.num++ } } })
3、在组件中使用,如下图
//<div> //累计完成<span>{{ num }}</span>元 //</div> // 引入pinia import {useStore} from "@/stores/counter" import { storeToRefs } from "pinia"; // 获取pinia的state模块 const store = useStore() const {num, newNum} = storeToRefs(store); const {increment} = store;