首页 > 其他分享 >Pinia 快速上手要点

Pinia 快速上手要点

时间:2023-08-29 12:55:05浏览次数:34  
标签:const mainStore state getter Pinia 要点 快速 useMainStore store

  1. 使用 defineStore 创建一个 store, 每个 store 要设置一个唯一 id;

    
    import { defineStore } from 'pinia'
    import { ref } from 'vue'
    
    // useStore 可以是 useUser、useCart 之类的任何东西
    // 第一个参数是应用程序中 store 的唯一 id
    export const useMainStore = defineStore('main', {
      // other options...
        const name = ref('cherish')
    	const count = ref(0)
        
        return {
        	name,
            count
    	}
    })
    
    
  2. 改变state 的值时不需要借助 mutation (pinia中没有mutation), 默认情况下,您可以通过 store 实例访问状态来直接读取和写入状态;

    
    const mainStore = useMainStore()
    mainStore.count++
    
    
  3. 除了直接用 store.count++ 修改 store,你还可以调用 $patch 方法同时应用多个更改; $patch 方法也接受一个函数来批量修改集合内部分对象的情况;

    
    const mainStore = useMainStore()
    mainStore.$patch({
      counter: mainStore.counter + 1,
      name: 'yb.z',
    })
    
    
  4. useMainStore 中的返回值,不能使用解构语法,否则会失去响应性,但是可以使用 storeToRefs 包裹 store,然后可以使用解构;

    
    import { storeToRefs } from 'pinia'
    
    const mainStore = useMainStore() // 正确
    const { name } = useMainStore() // 错误
    const { name } = storeToRefs(useMainStore()) // 正确
    
    
  5. 通过调用 store 上的 $reset() 方法将状态 重置 到其初始值;

    
    const mainStore = useMainStore()
    mainStore.name = 'yb.z'
    mainStore.$reset() // mainStore.name cherish
    
    
  6. 可以通过将其 $state 属性设置为新对象来替换 Store 的整个状态;

    
    const mainStore = useMainStore()
    mainStore.$state = { counter: 666, name: 'yb.z' }
    
    
  7. 可以通过 store 的 $subscribe() 方法查看状态及其变化, 与常规的 watch() 相比,使用 $subscribe() 的优点是 subscriptions 只会在 patches 之后触发一次;

  8. 使用getter 和 直接在状态中使用 computed 计算的效果一样;

  9. 如果一个 getter 依赖另一个 getter,通过 this 访问任何其他 getter;

    
    export const useStore = defineStore('main', {
      state: () => ({
        counter: 0,
      }),
      getters: {
        // 类型是自动推断的,因为我们没有使用 `this`
        doubleCount: (state) => state.counter * 2,
        // 这里需要我们自己添加类型(在 JS 中使用 JSDoc)。 我们还可以
        // 使用它来记录 getter
        /**
         * 返回计数器值乘以二加一。
         *
         * @returns {number}
         */
        doubleCountPlusOne() {
          // 自动完成 ✨
          return this.doubleCount + 1
        },
      },
    })
    
    
  10. 同 computed 属性一样,getter 默认是不能传递参数进去的,但是,您可以从 getter 返回一个函数以接受任何参数,此时 getter 变成了一个普通函数,不再缓存数据。

  11. 要使用其他 store 的 getter, 可以直接在一个 store 中引入和使用另一个 store;

    import { useOtherStore } from './other-store'
    
    export const useStore = defineStore('main', {
      state: () => ({
        // ...
      }),
      getters: {
        otherGetter(state) {
          const otherStore = useOtherStore()
          return state.localData + otherStore.data
        },
      },
    })
    
  12. getter 的访问和 state 一模一样,都是 xxxStore.xxx;

  13. 与 getter 一样,actions 操作可以通过 this 访问整个 store 实例,不同的是,action 可以是异步的,当然也可以是同步的,你可以在它们里面 await 调用任何 API,以及其他 action!可以把 action 理解为普通的方法;

  14. 想要使用另一个 store 的action的话,可以直接在一个 store 中引入和使用另一个 store, 然后直接在 action 中调用就好了另一个 store 的action 就好了。

    import { useAuthStore } from './auth-store'
    
    export const useSettingsStore = defineStore('settings', {
      state: () => ({
        preferences: null,
        // ...
      }),
      actions: {
        async fetchUserPreferences() {
          const auth = useAuthStore()
          if (auth.isAuthenticated) {
            this.preferences = await fetchPreferences()
          } else {
            throw new Error('User must be authenticated')
          }
        },
      },
    })
    

标签:const,mainStore,state,getter,Pinia,要点,快速,useMainStore,store
From: https://www.cnblogs.com/CherishTheYouth/p/cherishtheyouth_20230829.html

相关文章

  • 快速排序
    快速排序是一种常见的排序算法,它的基本思想是通过分治的策略将一个大问题拆分为若干个小问题,并通过递归求解这些小问题,最终将整个问题排序完成。具体的步骤如下:选择一个基准元素,一般选择第一个元素。将序列中小于等于基准元素的元素移动到基准元素的左边,大于基准元素的元素移......
  • draw.io快速入门(上)
    1编辑图标Draw.io(现名diagrams.net)是免费的在线图形绘制工具,可用于创建各种类型的图表、流程图、组织结构图、UML图、网络拓扑图等。以下是Draw.io的一些特点和功能:免费和开源Draw.io是一个免费的工具,用户可以免费访问和使用其所有功能。并且它是开源软件,用户可以查看和......
  • 递归排序之快速排序(挖坑法)
    1#include<stdio.h>234unsignedcharstandard(unsignedchar*array,unsignedcharlow,unsignedcharhigh)5{6unsignedcharkey=array[low];7while(low<high)8{9while(low<high&&array[high]&g......
  • Java快速入门
    网上有很多的相关资料,这里也就不做过多概念的论述了本人电脑:目前使用win11,内存64,处理器12900hJava简介Java由詹姆斯高斯林开发,原本归属于SUN公司(斯坦福网络),后来SUN公司被Oracle(甲骨文)收购,目前版本归属于Oracle,现在的java版本已经很多了,目前市面上使用......
  • Java++:对List对象列表属性值的快速搜索
    思路:1、传入数据源List,并指定要搜索的字段;将这些字段的值拼接成一个字符串,并保存每个对象的值的起始和结束位置:2、搜索时,先使用正则表达式在保存的搜索字符串找到位置,再利用这些位置在索引数据数组中找到对应对象索引;importjava.lang.reflect.Field;importjava.util.ArrayLis......
  • React加载组件后自动触发某函数,而不需要点击按钮
    问题在项目中使用了ReactToPrint来实现打印,但是trigger属性中的按钮需要点击才能执行打印。期望能在组件加载完成时自动执行打印方法。解决可在组件加载完成时,通过id获取组件,并执行该组件的click方法。代码如下:importReact,{useRef,useEffect}from'react';//.........
  • 基于亚马逊云科技无服务器服务快速搭建电商平台——性能篇
    使用Serverless构建独立站的优势在传统架构模式下,如果需要进行电商大促需要提前预置计算资源以支撑高并发访问,会造成计算资源浪费并且增加运维工作量。本文介绍一种新的部署方式,将WordPress和WooCommerce部署在AmazonLambda中。Lambda是无服务器的计算方式,无需预置资源......
  • 快速幂
    求\(a^n\):传统做法:\(a\timesa\times...\timesa\),时间复杂度O(n)快速幂算法:\(5^{13}\to5\times5^6\times5^6\to5\times15625\times15625\)复用相同的数\(2^8\to(2^4)^2\to2^4\times2^4\)\(2^4\to2^2\times2^2\)时间复杂度O(log(n))而对应的幂......
  • AcWing 875. 快速幂
    题目给定$n$组$a_i,b_i,p_i$,对于每组数据,求出${a_i}^{b_i}mod{p_i}$的值。输入格式第一行包含整数$n$。接下来$n$行,每行包含三个整数$a_i,b_i,p_i$。输出格式对于每组数据,输出一个结果,表示${a_i}^{b_i}mod{p_i}$的值。每个结果占一行。数据范围$1≤n≤100000,......
  • kubernetes client-go快速入门及源码阅读
    client-go是kubernetes官方维护的一个go语言客户端,用于与k8s集群交互,使用client-go可以很方便的完成k8s的二次开发(似乎也必不可少),无论是稳定性还是健壮性都有充分的保障。client-go代码版本:v0.20.2个人水平有些,一定会出现不严谨或者错误的地方,如有错误麻烦评论指正,谢谢版......