首页 > 其他分享 >前端-vue工程化-Pinia的使用

前端-vue工程化-Pinia的使用

时间:2024-07-04 14:57:42浏览次数:19  
标签:vue const Store Pinia 工程化 ref store doubleCount

先来看一下我们的文件夹吧:

大多数vue3前端项目中都会有这样一个文件夹是用来存放全局变量的地方,用来做状态管理。

我们项目中使用的状态管理工具其实就是Pinia,当然不是我推荐大家用的,这个有迹可循,因为Pinia是在Vue官网上被推荐的一种方式。下面截几张官网上的图片:

然后给大家推荐两篇我看到的比较不错的博文:

【vue3】基础知识点-pinia_vue3 definestore-CSDN博客文章浏览阅读1k次。vue3基础知识点-pinia_vue3 definestorehttps://blog.csdn.net/weixin_49668076/article/details/132182309https://www.cnblogs.com/zuoyang/p/17831607.htmlicon-default.png?t=N7T8https://www.cnblogs.com/zuoyang/p/17831607.html我就是看了他们的文章,并且项目中确实用到了状态管理,所以顺便练习了一下,感觉他们写的已经很不错了,让我加深了印象和更好的理解了Pinia这个状态管理库。(其实我也不用再写了,看完这两篇文章,再去官网扫一眼,如果项目中真的需要,试用一下基本就可以成功。这里我还是把基本用法补充一下,主要是怕哪天文章被删掉了有风险,虽然概率不大。不过我的做法更多的也就是复制粘贴吧。看完试验一下,很快也就理解了。)

我们定义store的时候也有两种方式:选项式(Option Store)和组合式(Setup Store)

(1)选项式(Option Store)

(2) 组合式(Setup Store)

export const useCounterStore = defineStore('counter', () => {
  //响应式变量
  const count = ref(0)

  //这个相当于getters,也是响应式的
  const doubleCount = computed(() => count.value * 2)
   
   //定义函数
  function increment() {
    count.value++
  }

  return { 
    count, 
    doubleCount,
    increment
  }
})

其实组合式更贴近Vue3的写法。这里重点讲。

在 Setup Store 中:

  • ref() 就是 state 属性
  • computed() 就是 getters
  • function() 就是 actions

最后在具体的页面中使用它即可:

唯一需要注意的就是store中的响应式数据是不能被结构的!除非使用storeToRefs

<script setup>
import { storeToRefs } from 'pinia'

const store = useCounterStore()

// `name` 和 `doubleCount` 是响应式的 ref
// 同时通过插件添加的属性也会被提取为 ref
// 并且会跳过所有的 action 或非响应式 (不是 ref 或 reactive) 的属性
//错误写法:const { name, doubleCount } = store

const { name, doubleCount } = storeToRefs(store)

// 作为 action 的 increment方法 是可以直接解构
const { increment } = store


</script>

(自己对着官网抄写了一遍,才发现他们也有很多是抄过来的,好吧,我们都一样。)

这个也是官网的原话:

所以如果不是历史项目需要,可以直接上 Pinia 就行!

补充一句:项目中全局的状态管理并非是必要的,这一点官网说的也很客观,当我们业务有需要的时候,考虑的全局状态管理的确实有必要的时候,Pinia当然就是一个很不错的方式。

标签:vue,const,Store,Pinia,工程化,ref,store,doubleCount
From: https://blog.csdn.net/LM0916/article/details/140177895

相关文章

  • vue3 父组件【属性】传值给子组件【props】接收
     父组件文件:parentcomponent.vue子组件文件:childcomponent.vue传普通值传动态值传对象传数组<!--父组件--><template>   <h1>IamParentComponent</h1>   <ChildComponentmsg="nice"/>  </template><scriptsetup>   importC......
  • Vue.js 起步
     每个Vue应用都需要通过实例化Vue来实现。语法格式如下:varvm=newVue({//选项})接下来让我们通过实例来看下Vue构造器中需要哪些内容:实例<divid="vue_det"><h1>site:{{site}}</h1><h1>url:{{url}}</h1><h1>{{details()}}</h1>&l......
  • 基于java+springboot+vue实现的校园外卖服务系统(文末源码+Lw)292
    摘   要传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,外卖信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大用户的需求,因此就应运而生出相应的校园外卖服务系统。本......
  • 基于java+springboot+vue实现的宠物商城网站(文末源码+Lw)273
    摘   要传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,商品信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广大用户的需求,因此就应运而生出相应的宠物商城网站。本宠物......
  • Vue的常见指令及用法案例
    Vue会根据不同的标签指令,实现不同的功能。指令:指的是带有v-前缀的的特殊标签属性。我们常见的vue指令有:1.v-html:类似于js中innerHTML,用于设置元素的HTML。案例如下:<divid="app"><divv-html="msg"></div><divv-html="h"></div></di......
  • Echarts中的折线图,多个Y轴集中在左侧(在Vue中使用多个Y轴的折线图)
    简述:在ECharts中,创建一个带有多个Y轴的折线图,并且将这些Y轴都集中显示在图表的左侧,可以通过合理配置yAxis和series的属性来实现。简单记录一.函数代码drawCarNumEcs(){//初始化echarts图表,并绑定到id为"cfog_four"的DOM元素上varmyChart=this.$ec......
  • vue 运行npm run serve 出现 Starting development server... ERROR ValidationErro
    解决方式:报错信息不完整,但从给出的部分来看,这个错误与Webpack的进度插件(ProgressPlugin)有关。ValidationError:ProgressPluginInvalid表明进度插件配置无效或者不正确。解决方法:检查Webpack配置文件中是否正确引入并配置了进度插件。确保进度插件的使用方法符合最新版本的......
  • vue+openlayers之几何图形交互绘制基础与实践
    文章目录1.实现效果2.实现步骤3.示例页面代码3.基本几何图形绘制的关键代码1.实现效果绘制点、线、多边形、圆、正方形、长方形2.实现步骤引用openlayers开发库。加载天地图wmts瓦片地图。在页面上添加几何图形绘制的功能按钮,使用下拉列表(select)设置几何图形绘制......
  • 掉了两根头发后,我悟了!vue3的scoped原来是这样避免样式污染(下)
    前言在上一篇掉了两根头发后,我悟了!vue3的scoped原来是这样避免样式污染(上)文章中我们讲了使用scoped后,vue是如何给CSS选择器添加对应的属性选择器[data-v-x]。这篇文章我们来接着讲使用了scoped后,vue是如何给html增加自定义属性data-v-x。注:本文中使用的vue版本为3.4.19,@vitejs/......
  • vue3+node.js+mysql+electron+express实现用户登录,文章写入删除,全量更新,增量更新,和截
    第一件事情是安装node.js,去官网下,在终端node-v,npm-v有版本号就行了,不必搞环境配置,保姆级别教程,感谢哥有时间。嘻嘻,祝大家开心。1.首先你要创建electron项目打开vscode,新建终端输入代码npminit这个代码是初始化的意思会生成一个文件package.json里面的代码应该是这......