Nuxt跨页面、跨组件全局状态共享可使用 useState(支持Server和Client )
useState(init?: () => T | Ref): Ref
useState(key: string, init?: () => T | Ref): Ref
注意:
使用步骤:
composables/useCounter.ts
export default function () {return useState("counter", () => 100); // Ref
}// export const useCounter = () => {
// return useState("counter", () => 100);
// };
{{ counter }}
安装:
npm install @pinia/nuxt –-save
npm install pinia –-save
如有遇到pinia安装失败,可以添加 --legacy-peer-deps 告诉 NPM 忽略对等依赖并继续安装。或使用yarn
修改配置:
nuxt.config.ts
export default defineNuxtConfig({// 这里是配置Nuxt3的扩展的库modules: ["@pinia/nuxt"],
});
使用步骤:
store/home.ts
import { defineStore } from "pinia";export interface IState {counter: number;homeInfo: any;
}export const useHomeStore = defineStore("home", {state: (): IState => {return {counter: 0,homeInfo: {},};},actions: {increment() {this.counter++;},async fetchHomeData() {const url = "http://codercba.com:9060/juanpi/api/homeInfo";const { data } = await useFetch(url);console.log(data.value.data);this.homeInfo = data.value.data;},},
});
使用
{{ counter }}
共同点:
Pinia优势:
安装:
npm install element-plus --save
npm install unplugin-element-plus --save-dev
配置Babel对EP的转译
配置自动导入样式
nuxt.config.ts
import ElementPlus from "unplugin-element-plus/vite";
export default defineNuxtConfig({// dev buildbuild: {// 使用 Babel 进行语法转换transpile: ["element-plus/es"],},vite: {// 配置自动导入样式plugins: [ElementPlus()],},
});
使用:
我是button