pinia的使用

一、state的使用

1.一个简单的小例子:(重点讲是否可响应式)
定义一个store
import { defineStore } from 'pinia';
// useStore 可以是 useUser、useCart 之类的任何东西
// 第一个参数是应用程序中 store 的唯一 id
export const countAdd = defineStore('countAdd', {
  // other options...
  state: () => ({ count: 0 }),
  getters: {
    double: (state) => state.count * 2,
  },
  actions: {
    increment() {
      this.count++;
    },
  },
});
使用
1.1 以下是可实现响应式的写法
// 写法一:结合computed使用
// 页面中
  <div>{{ count }}</div>
  <div>{{ double }}</div>
  <van-button @click="increment">点击</van-button>
// script中
  import { computed } from 'vue';
  import { countAdd } from '/@/store/modules/countAdd';
  const countStore = countAdd();
  // 这种写法是响应式的
  const count = computed(() => countStore.count);
  const double = computed(() => countStore.double);
  // 是的,没错,可以通过 store 实例访问状态来直接读取和写入状态
  countStore.count++;
  const increment = () => {
    countStore.count++;
  };

// 写法二:直接在页面中引用
// 页面中
  <div>count:{{ countStore.count }}</div>
  <div>double:{{ countStore.double }}</div>
  <van-button @click="increment">点击</van-button>
// script中
  import { computed } from 'vue';
  import { countAdd } from '/@/store/modules/countAdd';
  const countStore = countAdd();
  // 是的,没错,可以通过 store 实例访问状态来直接读取和写入状态
  countStore.count++;
  const increment = () => {
    countStore.count++;
  };
1.2 以下是没有响应式的写法
// 页面中
  <div>{{ count }}</div>
  <van-button @click="increment">点击</van-button>
// script中
  import { countAdd } from '/@/store/modules/countAdd';
  const countStore = countAdd();
  // 解构不行!!不是响应式的
  // const { count } = countStore;
  // 下面这种写法也不行!!不是响应式的
  // const count = countStore.count;
  const increment = () => {
    countStore.count++;
  };
2.访问 “state”

默认情况下,您可以通过 store 实例访问状态来直接读取和写入状态:

const store = useStore()
store.counter++
3.重置状态
const store = useStore()
store.$reset()
4.改变状态

除了直接读写,也可以使用 $patch() 方法,支持“state”对象同时应用多个更改

store.$patch({
  counter: store.counter + 1,
  name: 'Abalam',
})
// 或
cartStore.$patch((state) => {
  state.items.push({ name: 'shoes', quantity: 1 })
  state.hasChanged = true
})
使用state要注意的点:

1、pinia和vuex一样,一刷新,数据会重置
2、不能对其进行解构:store 是一个用reactive 包裹的对象,这意味着不需要在getter 之后写.value,但是,就像setup 中的props 一样,我们不能对其进行解构

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值