在ts文件中使用pinia(getActivePinia was called with no active Pinia. Did you forget to install pinia)报错解决
一、创建store.ts文件
import { createPinia } from "pinia";
const store = createPinia();
export { store };
二、在main.ts中引入
import { createApp } from "vue";
import "./style.css";
import "./main.css";
import App from "./App.vue";
import ElementPlus from "element-plus";
import Avue from "@smallwei/avue";
import "@smallwei/avue/lib/index.css";
import "@/assets/css/mapbox-gl.css";
import { store } from "@/pinia/index"; // 引入创建好的pinia
import router from "@/router/index";
import "element-plus/dist/index.css";
const app = createApp(App);
app.use(router);
app.use(store); // 使用pinia
app.use(ElementPlus);
app.use(Avue);
app.mount("#app");
三、创建自己的pinia文件
import { defineStore } from "pinia";
interface State {
nodeArr: any[] | [];
stencilLoading: boolean;
selectNodeId: number;
lcNodeData: LCDataType | {}
}
const defaultState: State = {
nodeArr: [], // 拖拽栏中的节点数据
stencilLoading: true, // 拖拽栏的loading加载
selectNodeId: -1, // 选中拖拽栏的节点id
lcNodeData: {}, // 选中画布中的LC数据
};
export const lcDataStore = defineStore("lcData", {
state: () => {
return defaultState;
},
getters: {},
actions: {},
});
四、在ts文件中使用pinia
import { lcDataStore } from "@/pinia/lcAssign";
import { store } from "@/pinia/index";
const lcStore = lcDataStore(store); // 这里要把store传进去
// 之后就可以使用lcStore里面的属性和方法