Vue2中Pinia安装及问题的处理

前言

在版本迭代优化中,项目中大量使用VUEX,正好想使用一下新的Pinia,因为某些原因不能对现有的框架进行升级,所以还是延续vue2。 Vue版本:2.6.14

开始pinia的迁移之路

  1. 首先需要将项目中原有的vuex进行卸载,卸载命令如下
js 复制代码
npm uninstall vuex

2.安装Pinia

js 复制代码
    npm install pinia

在你的代码中引入 Pinia,并创建一个 Pinia 实例:

import { createPinia } from 'pinia'; const pinia = createPinia();

因为Pinia目的是设计一个拥有组合式 API 的 Vue 状态管理库。 所以咱们还需要安装组合式 API 包:@vue/composition-api

安装@vue/composition-api

js 复制代码
npm install @vue/composition-api

到现在安装命令结束。接下来就是注册 因为我的Store只有一个出口文件就是Store/index.js

store/index.js 复制代码
import Vue from 'vue'
import { createPinia,PiniaVuePlugin } from 'pinia'
const pinia = createPinia();
Vue.use(PiniaVuePlugin)
export default pinia;
export  * from './modules/app'

再注册composition-api,同时也将pinia也引入main.js中

main.js 复制代码
import store from './store'
import VueCompositionAPI from '@vue/composition-api';
Vue.use(VueCompositionAPI);
new Vue({
  el: '#app',
  ....
  store,
  render: h => h(App)
}).$mount('#app')

此时咱们就可以按照Pinia官方提供的API进行对原有VUEX的写法进行改造了。

原有的VUE示例:

js 复制代码
const app = {
  state: {
    istask:  false,
  },
  mutations: {
    SET_TASK(state) {
      state.istask= !state.istask;
    },
    
  },
  actions: {
    settask({ commit }) {
      commit('SET_TASK')
    },
   
  }
}
export default {
  namespaced: true,
  ...app
};

Pinia:

import 复制代码
const userAppStore = defineStore('app', {
    state: () => {
        return {
            istask: false
        }
    },
    actions: {
        SET_TASK(state) {
            this.istask = !this.istask;
        },
    }
})
export userAppStore

.vue中的使用

css 复制代码
import { userAppStore } from '@/store/index' 
import { mapState, mapActions } from 'pinia'; pinia的两个方法

computed: {
        ...mapState(userAppStore, ['istask']),
    },
    methods: {
        ...mapActions(userAppStore, ['SET_TASK']),
        }

以上就是pinia的使用,pinia详细的文档教程还需要上官方去看 Pinia 使用中遇见了两个问题 1.

解决方案如下: 在vue.config.js中配置webpack

js 复制代码
chainWebpack(config) {
			config.module
			.rule('mjs')
			.test(/\.mjs$/)
			.include.add(/node_modules/).end()
			.type('javascript/auto');
	},

2.在VueRouter中使用Pinia 报错信息如下: Uncaught Error: [🍍]: getActivePinia was called with no active Pinia. Did you forget to install pinia? const pinia = createPinia() app.use(pinia) This will fail in production.

原因:VueRouter的执行比Pinia早

Pinia 官方文档已经给出解决方案:在组件外使用 store | Pinia (vuejs.org) 解决方法:

单独写一个pinia文件:

import { createPinia } from "pinia"; const pinia = createPinia(); export default pinia;

router.js

javascript 复制代码
import  pinia from '@/store/pinia';

import  {userAppStore} from '@/store/index';

const store = userAppStore(pinia)
....你需要操作的数据

以上就是pinia的使用和遇见的问题,后续遇到别的问题再行补充。

相关推荐
一 乐5 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
C_心欲无痕6 小时前
ts - tsconfig.json配置讲解
linux·前端·ubuntu·typescript·json
清沫6 小时前
Claude Skills:Agent 能力扩展的新范式
前端·ai编程
yinuo7 小时前
前端跨页面通信终极指南:方案拆解、对比分析
前端
yinuo7 小时前
前端跨页面通讯终极指南⑨:IndexedDB 用法全解析
前端
xkxnq8 小时前
第二阶段:Vue 组件化开发(第 16天)
前端·javascript·vue.js
烛阴8 小时前
拒绝配置地狱!5 分钟搭建 Three.js + Parcel 完美开发环境
前端·webgl·three.js
Van_Moonlight8 小时前
RN for OpenHarmony 实战 TodoList 项目:空状态占位图
javascript·开源·harmonyos
xkxnq8 小时前
第一阶段:Vue 基础入门(第 15天)
前端·javascript·vue.js
anyup9 小时前
2026第一站:分享我在高德大赛现场学到的技术、产品与心得
前端·架构·harmonyos