vue3+pinia的使用

pinia新的状态管理工具
1、安装

npm install pinia --save

2、新建store,在main.js中引入

在根目录下新建store文件夹,新建index.js

import { createPinia } from "pinia";
// 创建store
const store = createPinia();
export default store;

main.js

import { createApp } from "vue";
import App from "./App.vue";
import store from "./store";

const app = createApp(App);

app.use(store);

app.mount("#app");

3、在store文件夹下新建stateStore.js
import { defineStore } from "pinia";

export const stateStore = defineStore({
  id: "state", //命名
  state: () => {
    return {
      name: "菠萝",
      age: 99,
    };
  },
  //会缓存,不改变不调用,像计算属性
  getters: {
    getterName(state) {
      console.log("使用了getter");
      return "我是什么水果?我是" + state.name;
    },
  },
  actions: {
    //还支持调用别的actions
    updateName(name, age) {
      this.name = name;
      this.updateAge(age);
    },
    updateAge(age) {
      this.age = age;
    },
    //异步action 也支持 async/await的语法
    async asyncfun() {
      const timer = setTimeout(() => {
        this.name = "桃子";
      }, 1000);
      await timer;
    },
  },
});

4、使用

先引入创建的store

解构需要引入storeToRefs

修改state数据可以直接修改,也可以使用$patch,也可以使用actions修改

<template>
  <div>
    <h1>pinia:{{ name }}</h1>
    <h1>pinia:{{ age }}</h1>
    <h1>pinia.getter:{{ state.getterName }}</h1>
    <el-button type="primary" @click="changeName">修改pinia</el-button>
  </div>
</template>

<script setup>
import { stateStore } from "../store/state";
//解构store
import { storeToRefs } from "pinia";
const state = stateStore();
const { age, name } = storeToRefs(state);

const changeName = () => {
  // 通过patch修改数据两种方式对象和函数
  // 1、对象
  //   state.$patch({
  //     name: "西瓜",
  //     age: 100,
  //   });
  // 2、函数
  //   state.$patch((state) => {
  //     state.name = "哈密瓜";
  //     state.age = 999;
  //   });

  // 通过action修改数据
  state.updateName("香蕉", 88);
  state.asyncfun();
};
</script>

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值