Pinia快速上手

目录

一、安装

二、配置步骤

1.引入

2.创建实例对象

三、使用

1.$patch和store.值

2.$reset()

3.$subscribe

4.使用actions里的方法


一、安装

yarn add pinia
# 或者使用 npm
npm install pinia

二、配置步骤

1.引入

// 在main.js引入
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'

import {createPinia} from 'pinia'

// 这里可以链式调用
createApp(App).use(createPinia()).mount('#app')

2.创建实例对象

// 在src下创建store/index.js

import { defineStore } from "pinia";

onst store = defineStore("main", {
  state: () => {
    return {
      count: 10
    };
  },
  getters: {},
  //   vuex这里只能进行异步操作,而这里同步异步都可以
  actions: {
    setCount:()=>{
        // 这里的this可以拿到store里的state和getter
        this.count = 20
    }
  },
  // 与vuex相比,没有了mutation
});

export { store };

三、使用

1.$patch和store.值

访问和修改state里的数据

<script setup>
import { toRefs } from "vue";
import { store } from "./store";
import { storeToRefs } from "pinia";

// 创建实例
const store1 = store();

// 将数据变成响应式的
// 方式1:
// let { count } = toRefs(store1);
// 方式2:
let { count } = storeToRefs(store1);

const dianji = () => {
  // [这种方式只能修改1个数据]
  store1.count++;
  store1.list.push({
    name: "vivo",
    price: 9999,
  });
};

// 修改store仓库里面的数据 通过$patch修改
const patchclick = () => {
  store1.list.push({
    name: "oppo",
    price: 6666,
  });
  // [这种可以修改多条数据](推荐下面函数式写法)
  store1.$patch({
    count: store1.count + 5,
    list: store1.list,
  });
};

// 函数式写法
const disanzhon = () => {
  // 自带state加持
  store1.$patch((state) => {
    state.list.push({
      name: "小米",
      price: 6666,
    });
  });
};
</script>

<template>
  <div>
    <h1>商品数量:{{ store1.count }}</h1>
    <h1>商品数量2:{{ count }}</h1>
    <button @click="dianji">点击</button>
    <button @click="patchclick">$patch修改</button>
    <button @click="disanzhon">$patch函数式修改</button>
    <ul>
      <li v-for="(item, index) in store1.list" :key="index">
        {{ item.name }}:{{ item.price }}
      </li>
    </ul>
  </div>
</template>

<style scoped>
</style>

2.$reset()

重置state(回复到最开始的时候)

<script setup>
import { toRefs } from "vue";
import { store } from "./store";
import { storeToRefs } from "pinia";

// 创建实例
const store1 = store();

// 将数据变成响应式的
let { count } = storeToRefs(store1);

// 重置
const chonzhi = () => {
  store1.$reset();
};

</script>

<template>
  <div>
    <button @click="chonzhi">重置</button>
  </div>
</template>

<style scoped>
</style>

3.$subscribe

监听仓库变化

// 监听整个仓库变化
store1.$subscribe((mutation,state)=>{
  // 数据变化的一些信息
  console.log(mutation);
  console.log(state);
})

4.使用actions里的方法

    <button @click="store1.getTimu()">请求</button>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值