首页 > 其他分享 >vue3的状态管理方案pinia/类似于vue2的VueX

vue3的状态管理方案pinia/类似于vue2的VueX

时间:2022-08-24 16:55:51浏览次数:79  
标签:count const vue2 app counter pinia vue3 import

pinia官网:https://pinia.vuejs.org/
pinia菠萝挺不错,简单又灵活。
1.安装:yarn add pinia 或者 npm install pinia,全局加 --location=global
2.注册使用 main.js

import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'

const app = createApp(App);
const pinia = createPinia();
app.use(pinia);
app.mount('#app');
//异常统一处理
app.config.errorHandler = (err) => {
    /* handle error */
    console.log("exception:" + err);
}

3.在src目录下创建store文件夹,然后创建counter.js文件,名字自己定,官网参考:https://pinia.vuejs.org/core-concepts/
方式一 options stores

import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', {
    //方式一
    // state: () => {
    //     return { count: 0,user_name:'jay.star' }
    // },
    //方式二
    state: () => ({ count: 0, user_name: 'jay.star' }),
    //相当于计算属性 computed
    getters: {
        doubleCount: (state) => state.count * 2,
    },
    //相当于 methods
    actions: {
        increment() {
            this.count++
        },
    },
});

方式二setup stores

import { defineStore } from 'pinia'
import { ref } from 'vue';
export const useCounterStore = defineStore('counter', () => {
    const count = ref(0);
    const user_name = ref("jay.star");
    //getters
    const doubleCount = computed(() => count.value * 2);
    //即 actions 和 methods
    function increment() {
        count.value++
    }
    return { count, user_name, doubleCount, increment };
});

  4.使用

<script setup>
import { useCounterStore } from "@/stores/counter";
const counter = useCounterStore();
// 直接修改
counter.count++;
// $patch
counter.$patch({ count: counter.count + 1 });
// action
counter.increment();
</script>

  更多参考官网



标签:count,const,vue2,app,counter,pinia,vue3,import
From: https://www.cnblogs.com/xsj1989/p/16620664.html

相关文章

  • vue3 在setup 外部调用 useStore() 为 undefined 解决
    场景:在router/index.ts中想要获取storeimport{useStore}from'@/vuex';conststore=useStore()console.log('appstore',store)//undefined 在App.vue,或者......
  • vue3+ts使用bus事件总线
    1、在vue2中我是这样使用的//创建一个vueBus.jsimportBusfrom'vue';letinstall=function(Vue){Vue.prototype.$bus=newBus()}exportdefault{install};......
  • vue3 学习-初识体验-组件 component
    组件可以简单理解为"页面构成的一部分".组件化是Vue最为重要的设计理念之一吧.早期的前端页面基本上就拆分为一个个的html,css,js文件,然后不断"堆砌",一套js库......
  • VUE3.0+Antdv+Asp.net WebApi开发学生信息管理系统(四)
    在B/S系统开发中,前后端分离开发设计已成为一种标准,而VUE作为前端三大主流框架之一,越来越受到大家的青睐,Antdv是Antd在Vue中的实现。本系列文章主要通过Antdv和Asp.netWebA......
  • pinia 的奇葩字体
    乍一看挺好看,但可读性真的很差,作者还嘴硬不改。Issue见:[Docs]:DankMonoishardtoreadassomeonevisuallyandcognitivelyimpaired·Issue#873·vuejs/pi......
  • Vue3.2 setup语法糖中组件的 name 属性如何定义
    方案一:增加一个脚本标签<scriptlang="ts">exportdefault{name:'Layout'}</script>方案二:使用插件unplugin-vue-define-options 方案三:(推荐)使用插件vit......
  • Vue3插槽
    一、前言插槽其实就是子组件提供给父组件的占位符。子组件定义好插槽后,父组件可以替换插槽内容。子组件不提供插槽时,父组件填充失效父组件无填充时,会使用插槽默认内容......
  • vue3支付后不允许跳转回预付订单页
    场景:在电商项目中,订单页通常是用来展示给用户看的,当支付完成后,就不允许回退回来,防止二次支付以及商品信息错乱曾使用:router.push(`/member/pay?orderId=${res.data.resul......
  • vue3 单文件组件——父组件访问子组件的实例
    如果一个子组件使用的是选项式API 或没有使用 <scriptsetup>,被引用的组件实例和该子组件的 this 完全一致,这意味着父组件对子组件的每一个属性和方法都有完全的访问......
  • vue3源码学习
    建议先通过官方指南了解3.0都干了啥、解决了什么问题。然后才是阅读其源码(通过利器),进阶了解它是如何实现的。https://juejin.cn/post/6925668019884523534......