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的使用和遇见的问题,后续遇到别的问题再行补充。

相关推荐
Jmyd01237 小时前
Web端3D营销展厅技术实现路径:从素材上云到线索回流的数据链路
前端·3d·性能优化·三维数字化
半个落月8 小时前
LangChain Agent 中间件实战(上):生命周期、状态、短路与工具包
javascript·langchain
砚凝霜8 小时前
【软考信息安全】第二十二章 Web服务器安全分析与增强——Apache与IIS
服务器·前端·安全
半个落月8 小时前
LangChain Agent 中间件实战(下):DeepAgents文件权限、长期记忆与对话摘要
javascript·langchain
u01110267510 小时前
JPG、PNG、WebP 怎么选?按透明度、体积和使用场景做判断
前端·javascript·vue.js·图像处理·ai作画
jerrywus10 小时前
让 AI 写完代码后交一份报告:我改造了 answer-me-with-html
前端·claude·cursor
派小心.11 小时前
小程序分享链路中来源参数的传递校验
大数据·前端·数据库·人工智能·小程序·数据分析
hhb_61811 小时前
一键生成数据看板,ECharts实战演示
前端·javascript·echarts
Java后端的Ai之路11 小时前
08_React组件API
前端·react.js·前端框架
小马不起床11 小时前
零基础玩转 FastAPI_09:前端基础工程构建
前端·状态模式·fastapi