Pinia最简单使用(vite+vue3)

文章目录

创建项目·

js 复制代码
npm create vite@latest my-vue-app

选vue
选JavaScript
cd my-vue-app
npm install
npm run dev

安装Pinia包

js 复制代码
npm install pinia

main.js注册Pinia

js 复制代码
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import { createPinia } from "pinia";
const app = createApp(App)
const pinia = createPinia();
app.use(pinia).mount('#app');

在src下创建store/store.js文件,放入以下内容

js 复制代码
import { defineStore } from "pinia";
// 导出方法(每个方法对应一个模块,相当于vuex的模块化,引入组件时按需引入)
export const xj = defineStore("main", {
  state: () => {
    return {
      name: "萧寂",
      age: 22,
      sex: "男",
    };
  },
  getters: {},
  actions: {},
});

在app.vue中的使用(在其他组件也一样的)

html 复制代码
<script setup>
//解构出store.js内的需要的方法(每个方法对应一个模块,相当于vuex的模块化)
import { xj } from "./store/store";

//将数据变成响应式的方法
import { storeToRefs } from "pinia";

// 调用解构出来的方法
const store = xj();

//将store内的属性变成响应式的
storeToRefs(store);
//也可以(二者使用方式等价)
// const {name,age} = storeToRefs(store); //此时的name和age也是响应式的,但和ref不同,修改name或者age需要用store调用,如store.name=''

//修改数据
const changeName = () => {
  store.name = "张三";
};

//还原/重置所有数据
const reasetName = () => {
  store.$reset();
};
const reasetName2 = () => {
  // 这种重置相当于赋初始值操作,比较麻烦,推荐使用方式一
  store.name = "萧寂";
  store.age = 22;
  store.sex = "男";
};

//批量修改数据
const pathStore = () => {
  store.$patch({
    name: "小红",
    age: 100,
    sex: "女",
  });
};

const pathStore2 = () => {
  // 这种批量修改相当于赋值操作, 比较麻烦,推荐使用方式一
  store.name = "萧寂哈哈哈哈";
  store.age = 50;
  store.sex = "女";
};

const piniaData = () => {
  console.log(store.name);
  console.log(store.age);
  console.log(store.sex);
};
</script>

<template>
  <!-- 获取pinia的数据 -->
  <div>姓名:{{ store.name }}</div>
  <div>年龄: {{ store.age }}</div>
  <div>性别: {{ store.sex }}</div>

  <button @click="changeName">只更改姓名</button>
  <button @click="reasetName">重置所有(方法一)</button>
  <button @click="reasetName2">重置所有(方法二)</button>
  <button @click="pathStore">批量修改数据(方式一)</button>
  <button @click="pathStore2">批量修改数据(方式二)</button>
  <button @click="piniaData">在js里面打印当前数据</button>
</template>

<style scoped lang="scss"></style>

接下来直接运行就好,我个人就比较喜欢直接使用赋值,直接修改这种,并且支持重置和批量修改,这里并未讲到关于pinia的方法使用,如gettersactions配置,因为我个人目前还没用到这种场景,只用到了全局数据,这里就只讲到了最简单使用就上面的取值赋值重置批量修改在js中打印数据,我目前只用到了这些,如果需要其他更详细的,来我博客找详细的pinia笔记去看

相关推荐
linweidong5 分钟前
在企业级应用中,你如何构建一个全面的前端测试策略,包括单元测试、集成测试、端到端测试
前端·selenium·单元测试·集成测试·前端面试·mocha·前端面经
满怀101524 分钟前
【HTML 全栈进阶】从语义化到现代 Web 开发实战
前端·html
繁依Fanyi32 分钟前
用 UniApp 构建习惯打卡 App —— HabitLoop 开发记
javascript·uni-app·codebuddy首席试玩官
东锋1.336 分钟前
前端动画库 Anime.js 的V4 版本,兼容 Vue、React
前端·javascript·vue.js
满怀10151 小时前
【Flask全栈开发指南】从零构建企业级Web应用
前端·python·flask·后端开发·全栈开发
小杨升级打怪中1 小时前
前端面经-webpack篇--定义、配置、构建流程、 Loader、Tree Shaking、懒加载与预加载、代码分割、 Plugin 机制
前端·webpack·node.js
Yvonne爱编码1 小时前
CSS- 4.4 固定定位(fixed)& 咖啡售卖官网实例
前端·css·html·状态模式·hbuilder
SuperherRo2 小时前
Web开发-JavaEE应用&SpringBoot栈&SnakeYaml反序列化链&JAR&WAR&构建打包
前端·java-ee·jar·反序列化·war·snakeyaml
大帅不是我2 小时前
Python多进程编程执行任务
java·前端·python
前端怎么个事2 小时前
框架的源码理解——V3中的ref和reactive
前端·javascript·vue.js