Pinia 快速上手要点

这篇具有很好参考价值的文章主要介绍了Pinia 快速上手要点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  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 就好了。文章来源地址https://www.toymoban.com/news/detail-679357.html

    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')
          }
        },
      },
    })
    

到了这里,关于Pinia 快速上手要点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue项目引入cesium,创建3d地球,快速上手~

    最近开发的可视化项目中用到cesium库,准备把自己从中学习的功能,全部记录下来,完整项目demo预览地址:点击预览完整项目 引入ceium 网上有很多种引入,在此只介绍一种最简单的,也是本项目中使用的. 首先要先有一个cesium的库,这里我建议直接npm下载,自己也可以从github下载 npm i

    2024年02月13日
    浏览(41)
  • IDEA使用Maven快速创建一个Webapp项目(太细)

    环境:IDEA 2022.3.2 Maven项目的配置文件路径必须先设置好,否则一些依赖就不能成功引用(如果不是使用默认的本地仓库地址,而是新建的一个本地仓库地址),里面指向的是本地仓库的地址。(配置本地仓库和maven文件后期出 操作路径: Setting——搜索Maven——点击Maven——设

    2024年02月08日
    浏览(55)
  • 【python】Django——django简介、django安装、创建项目、快速上手

    笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ 【Django专栏】 Django——django简介、django安装、创建项目、快速上手 Django——templates模板、静态文件、django模板语法、请求和响应 Django——连接mysql数据库 Django 是一个高效、功能强大的 Web 应用程序框架,采用 Python 编写

    2024年02月20日
    浏览(54)
  • solr快速上手:搭建solr集群并创建核心,设置数据同步(十一)

    前几章我们已经讲解了solr单机版的基本使用,但实际生产中,为了保证高可用、高性能,我们一般会采用集群模式,所以接下来,我们继续讲解solr集群的搭建和基本操作 在讲解solr集群模式前,我们要先了解“分片”的概念。 当节点由一个拓展为多个时,数据存储和同步问

    2024年02月13日
    浏览(86)
  • Newspaper库,一个新手也能快速上手的爬虫库

    目录 Newspaper 安装 实战 1. 抓取CSDN上的文章 2. 查阅网易新闻的内容 总结 是一个强大的Python库,专门用于从新闻网站和文章中提取信息。它提供了一种简单而高效的方式来抓取新闻网页,解析内容,并提取出有用的信息,如文章标题、正文、作者、发布日期等。 首先,Newspa

    2024年03月25日
    浏览(39)
  • 【微信小程序】小程序是什么?怎样快速上手开发一个小程序?

    大家好,从今天起我们开始微信小程序的学习之路,今天我们就先来认识一下什么是微信小程序,以及做好小程序开发前的准备! 微信小程序,简称小程序,是一种不需要下载安装即可使用的应用,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地获取和传播

    2024年02月09日
    浏览(57)
  • 【Microsoft Azure 的1024种玩法】五十四. 十分钟快速上手创建部署Azure speech服务

    Azure语音服务是Microsoft提供稳定可靠的云通信服务,其在单个 Azure 订阅中统合了语音转文本、文本转语音以及语音翻译功能,我们可以通过各种方式(语音 CLI、语音 SDK、Speech Studio )来实现语音转文本、文本转语音等功能,本篇文档主要介绍了如何快速上手创建部署Azure sp

    2024年02月12日
    浏览(46)
  • kafka使用教程、快速上手

    Kafka 是一个分布式的基于发布 / 订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。 1.2.1 传统消息队列的应用场景 使用消息队列的好处: 解耦 允许独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。 可恢复性 系统的一部分组件失效时

    2023年04月14日
    浏览(50)
  • 宜搭低代码快速上手使用手册

    广东数据项目组中,需要进行四员协同的开发工作,四员协同这个模块简单点说就是通过表单和流程相结合,进行数据收集和流程流转。在宜搭低代码中,可以直接用成员组件完成钉钉内的流程表单提交,和钉钉app相结合。基于广州项目组地市客户之前已经用过宜搭,故省局

    2024年02月22日
    浏览(37)
  • MybatisPlus基本使用(MP快速上手)

    目录 概述 MP快速上手(基本操作)  SpringBoot中MyBatisPlus环境搭建 增删改查 分页 条件查询(聚合,模糊,匹配范围) 条件:范围匹配 (大于小于等于...) 优化查询条件书写() 条件:查询投影 条件:模糊查询(非全文检索)  条件:聚合函数和分组 条件:排序操作   

    2024年02月05日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包