当前位置: 首页 > news >正文

极简Vue3教程--Pinia状态管理

Pinia(发音为/piːnjʌ/,如英语中的“peenya”)是最接近piña(西班牙语中的菠萝)的词;Pinia开始于大概2019年,最初是作为一个实验为Vue重新设计状态管理,让它用起来像组合式API(Composition API)。从那时到现在,最初的设计原则依然是相同的,并且目前同时兼容Vue2、Vue3,也并不要求你使用Composition API;Pinia本质上依然是一个状态管理的库,用于跨组件、页面进行状态共享(这点和Vuex、Redux一样);

和Vuex相比,Pinia有很多的优势:比如mutations 不再存在:更友好的TypeScript支持,Vuex之前对TS的支持很不友好;不再有modules的嵌套结构:也不再有命名空间的概念,不需要记住它们的复杂关系;

使用Pinia

  1. 安装依赖

npm install pinia
  1. 创建一个pinia并且将其传递给应用程序:

我们新建一个文件夹叫stores,后续pinia相关文件都放入这个文件夹中,创建index.js

import { createPinia } from 'pinia'const pinia = createPinia()export default pinia

在main.js中引入使用

import { createApp } from 'vue'
import App from './App.vue'
import pinia from './stores'createApp(App).use(pinia).mount('#app')

这样pinia就引入了我们的app中,可以开始使用了

认识Store

一个 Store (如 Pinia)是一个实体,它会持有为绑定到你组件树的状态和业务逻辑,也就是保存了全局的状态;它有点像始终存在,并且每个人都可以读取和写入的组件;你可以在你的应用程序中定义任意数量的Store来管理你的状态;

Store有三个核心概念:state、getters、actions;

state用来存储数据,可以直接访问修改,getters类似computed,actions类似于methods,可以直接调用

定义一个Store

在stores文件夹下新建counter.js

import {defineStore} from 'pinia'export const useCounterStore = defineStore('counter', {state: () => {return {count: 0,banners: [],recommends: []}},getters: {doubleCount(state) {return state.count * 2}},actions: {async fetchHomeMultidata() {const res = await fetch("http://123.207.32.32:8000/home/multidata")const data = await res.json()this.banners = data.data.banner.listthis.recommends = data.data.recommend.listreturn 'ok'}}
})

使用store,useCounterStore是个函数,调用后可以返回一个store对象,里面可以直接使用state,getters和actions,其中state可以直接访问和修改,getters可以作为属性来使用,actions是作为方法来调用的,返回promise

<template><div class="home"><h2>count: {{ counterStore.count }}</h2><h2>count: {{ counterStore.doubleCount }}</h2><button @click="changeState">修改state</button><h2>轮播的数据</h2><ul><template v-for="item in counterStore.banners"><li>{{ item.title }}</li></template></ul></div>
</template><script setup>
import {useCounterStore} from '@/stores/counterStore';// useCounterStore是一个函数
const counterStore = useCounterStore()// actions返回的是promise
counterStore.fetchHomeMultidata().then(res => {console.log(res)
})function changeState() {// state可以直接访问和修改counterStore.count++
}</script>

http://www.lryc.cn/news/27694.html

相关文章:

  • 常用的map转bean互转方法
  • 2.4G收发一体芯片NRF24L01P跟国产软硬件兼容 SI24R1对比
  • 设计模式之七大原则(一)——单一职责原则、开放-关闭原则
  • C++ set、unordered_set、multiset它们之间的区别与一些使用方法(不断更新)
  • hadoop调优
  • EM@三角函数诱导公式
  • 是不是只能学IT互联网技术才有发展前途?
  • Linux 进程:exit和_exit的辨析
  • 智能电子标签——商超版价签
  • 计算机网络自检
  • DC真实数据都有哪些?Filecoin为DC数据存储的解决方案又是什么?
  • 解决vscode无法自动更新
  • 315线上知识竞赛答题活动方案及模板分享
  • 论文复现-2:代码部分
  • Linux开放的端口太多了?教你一招找出所有开放的端口,然后直接干掉!
  • mysql集群简介
  • 装饰器模式
  • 21 Nacos客户端本地缓存及故障转移
  • 遍历读取文件夹下的所有文件
  • nexus安装与入门
  • Flink SQL Checkpoint 学习总结
  • 2023年“楚怡杯“湖南省职业院校技能竞赛“网络安全”竞赛任务书
  • MyBatis中主键回填的两种实现方式
  • Windows11如何打开ie浏览器
  • Linux:进程间通信
  • 【java】将LAC改造成Elasticsearch分词插件
  • TPM 2.0实例探索3 —— LUKS磁盘加密(5)
  • mybatisplus复习(黑马)
  • 【数据聚类|深度聚类】Deep Comprehensive Correlation Mining for Image Clustering(DCCM)论文研读
  • CE认证机构有哪些机构?