Vue3-Pinia

Pinia是什么

Pinia是Vue的最新状态管理工具,是Vuex的替代品

比Vuex更大的优势在于:

1.提供更加简单的API(去掉了mutation)

2.提供符合,组合式风格的API(和Vue3新语法统一)

3.去掉了modules的概念,每一个store都是一个独立的模块

4.配合TypeScript更加友好,提供可靠的类型推断

手动添加Pinia到Vue项目

在实际开发项目的时候,关于Pinia的配置,可以在项目创建时自动添加

现在初次学习,从零开始:

1.使用Vite创建一个空的Vue3项目

npm create vue@latest

2.按照官方文档安装pinia到项目中

官方文档:Pinia | Pinia

先装包

在mian.js文件中添加以下语句:

import { createPinia } from 'pinia'
const pinia = createPinia()
app.use(pinia)

基本语法

在src文件夹下,创建一个名为store的文件夹,创建js文件

定义数据

JS文件中编写语句定义数据,export导出仓库,仓库里的变量要return出去才能去使用

仓库变量名=use+仓库名+Store

import { defineStore } from 'pinia'
import { ref } from 'vue'

//定义store
//defineStore(仓库的唯一标识,()=>{...})
export const useCounterStore = defineStore('counter', () => {
  //声明数据state
  const count = ref(0)
  //声明操作数据的方法 action(普通函数)

  //声明基于数据派生的计算属性 getters(computed)

  return {
    count
  }
})

使用数据(在App.vue和子组件中都是如此)

<script setup>
import { useCounterStore } from '@/store/counter.js'
const counterStore = useCounterStore()
console.log(counterStore.count)
</script>

<template>
  {{ counterStore.count }}
</template>

定义操作数据的方法

JS文件中编写语句定义方法,仓库里的方法要return出去才能去使用

import { defineStore } from 'pinia'
import { ref } from 'vue'

//定义store
//defineStore(仓库的唯一标识,()=>{...})
export const useCounterStore = defineStore('counter', () => {
  //声明数据state
  const count = ref(0)
  //声明操作数据的方法 action(普通函数)
  const addCount = () => count.value++
  const subCount = () => count.value--
  //声明基于数据派生的计算属性 getters

  return {
    count,
    addCount,
    subCount
  }
})

使用方法

<script setup>
import { useCounterStore } from '@/store/counter.js'
const counterStore = useCounterStore()
</script>

<template>
  <div>
    {{ counterStore.count }}
    <br>
    <button @click="counterStore.addCount">+</button>
    <button @click="counterStore.subCount">-</button>
  </div>
</template>

定义计算属性(用computed实现getter)

import { defineStore } from 'pinia'
import { computed, ref } from 'vue'

//定义store
//defineStore(仓库的唯一标识,()=>{...})
export const useCounterStore = defineStore('counter', () => {
  //声明数据state
  const count = ref(0)
  //声明操作数据的方法 action(普通函数)
  const addCount = () => count.value++
  const subCount = () => count.value--
  //声明基于数据派生的计算属性 getters
  const double = computed(() => count.value * 2)
  return {
    count,
    addCount,
    subCount,
    double
  }
})

使用计算属性

<script setup>
import { useCounterStore } from '@/store/counter.js'
const counterStore = useCounterStore()
</script>

<template>
  <div>
    {{ counterStore.double }}
  </div>
</template>

action异步实现

Pinia中不需要mutation,action既支持同步也支持异步

编写方式:异步action函数的写法和组件中获取异步数据的写法完全一致

安装axios

yarn add axios

 在store文件夹下,创建一个新的JS文件channel.js

import { defineStore } from 'pinia'
import { ref } from 'vue'
import axios from 'axios'

export const useChannelStore = defineStore('channel', () => {
  //声明数据
  const channelList = ref([])
  //声明getters相关
  const getList = async () => {
    const { data: { data } } = await axios.get('http://geek.itheima.net/v1_0/channels')
    channelList.value = data.channels
  }
  return {
    channelList,
    getList
  }
})

 数据获取和渲染

<script setup>
import { useChannelStore } from '@/store/channel.js'
const channelStore = useChannelStore()
</script>

<template>
    <button @click="channelStore.getList">获取频道数据</button>
    <ul>
      <li v-for="item in channelStore.channelList " :key="item.id">{{ item.name }}</li>
    </ul>
</template>

storeToRefs方法

如果对仓库直接解构使用,不进行处理,数据会丢失响应式

比如:

<script setup>
import { useCounterStore } from '@/store/counter.js'
const counterStore = useCounterStore()
const {count}=counterStore
</script>

<template>
  {{ count }}
</template>

如果想保持数据响应式,可以在解构的时候使用storeToRefs方法;不过解构函数不需要使用storeToRefs方法,直接解构就可以

<script setup>
import { storeToRefs } from 'pinia'
import { useCounterStore } from '@/store/counter.js'
const counterStore = useCounterStore()
const { count } = storeToRefs(counterStore)
</script>

Pinia调试

持久化

持久化插件官方文档:快速开始 | pinia-plugin-persistedstate

1.安装包

npm i pinia-plugin-persistedstate

2.在main.js中编写

import { createPinia } from 'pinia'
//导入pinia持久化的插件
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'

const pinia = createPinia()
const app = createApp(App)
app.use(pinia.use(piniaPluginPersistedstate))

3.使用:根据自己编写的语法选择添加

persist: true

如果这个模块添加了持久化,那么用户修改的数据会被存储到本地,刷新也是修改后的,加载时也是优先从本地读取数据

修改一些默认配置可以参考:配置 | pinia-plugin-persistedstate

  persist: {
    key: 'my-channels',//修改本地存储的唯一标识
    storage: sessionStorage,//存储到什么中
    paths: ['channelList']//存储的是哪些数据
  }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/196356.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JOSEF 漏电继电器JHOK-ZBL1 DH-50L 系统1140V 电源AC220V

系列型号&#xff1a; JHOK-ZBL多档切换式漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBL1多档切换式漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBL2多档切换式漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBM多档切换式漏电&#xff08;剩余&#xff09;继电器 …

为品质加冕 | 喜尔康智家再次斩获大奖

近日&#xff0c;被誉为“家居质量界奥斯卡”的2023年度沸腾质量奖颁奖盛典在福建厦门第三届家居质量大会同期隆重举行。现场重磅揭晓2023年沸腾质量奖测评获奖结果。 今年&#xff0c;喜尔康智能家居再接再厉&#xff0c;从数百家参评企业中脱颖而出&#xff0c;参评的智能坐便…

解锁领先的有限元分析软件ABAQUS:不同版本功能特点及价格

随着科学技术的飞速发展&#xff0c;工程领域对于高效可靠的仿真软件需求日益增长。ABAQUS作为有限元分析领域的佼佼者&#xff0c;为工程师提供了强大而灵活的工具&#xff0c;用于模拟和分析复杂的结构和材料行为。本文将深入介绍ABAQUS的概念、不同版本的特点、功能区别、定…

Baby-Step Giant-Step Homomorphic DFT

参考文献&#xff1a; [CT65] Cooley J W, Tukey J W. An algorithm for the machine calculation of complex Fourier series[J]. Mathematics of computation, 1965, 19(90): 297-301.[Shoup95] Shoup V. A new polynomial factorization algorithm and its implementation[…

LeetCode Hot100 84.柱状图中最大的矩形

题目&#xff1a; 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 方法&#xff1a; 代码&#xff1a; class Solution {public int largestRectang…

WIFI HaLow技术引领智能互联,打破通信限制

在过去十年里&#xff0c;WIFI技术已在家庭和企业中建立起了庞大的网络&#xff0c;连接了数十亿智能互联设备&#xff0c;促进了信息的迅速传递。然而&#xff0c;当前的WIFI标准存在一些挑战&#xff0c;包括协议范围的限制和整体功能的受限&#xff0c;导致在较远距离进行通…

工艺系统所管理数字化实践

摘要 本文介绍了上海核工程设计研究院在数字化转型方面的实践&#xff0c;包括业务数字化和管理数字化两个方面。业务数字化方面&#xff0c;该院通过开发小工具改进工作流程。管理数字化方面&#xff0c;该院采用零代码平台集中管理管道力学信息相关模型和数据&#xff0c;并…

写了个数据查询为空的 Bug,你会怎么办?

大家在开发时&#xff0c;遇到的一个典型的 Bug 就是&#xff1a;为什么数据查询为空&#xff1f; 对应的现象就是&#xff1a;前端展示不出数据、或者后端查询到的数据列表为空。 遇到此类问题&#xff0c;其实是有经典的解决套路的&#xff0c;下面鱼皮给大家分享如何高效解决…

Python基础语法之学习print()函数

Python基础语法之学习print函数 1、代码2、效果 1、代码 print("Hello World") print("Hello World1","Hello World2") print("Hello World1\n","Hello World2") print("Hello World",end" 默认结束符是行号…

2.ORB-SLAM3中如何从二进制文件中加载多地图、关键帧、地图点等数据结构

目录 1 为什么保存&加载(视觉)地图 1.1 加载多地图的主函数 1.2 加载各个地图 Atlas::PostLoad 1.3 加载关键帧及地图点Map::PostLoad 1.4 恢复地图点信息 MapPoint::PostLoad 1.5 恢复关键帧信息KeyFrame::PostLoad 1 为什么保存&加载(视觉)地图 因为我们要去做导…

如何写好产品软文?软文撰写指南!

针对某种产品写一篇软文&#xff0c;我们应该怎么构思&#xff0c;怎么提笔去写&#xff0c;怎么写得让用户认可我们的产品&#xff0c;并产生消费的冲动&#xff0c;这是需要讲究技巧的。 今天伯乐网络传媒来给大家分享三个步骤&#xff0c;教你轻轻松松撰写一篇爆文&#xf…

记一次域控迁移并升级

域环境&#xff1a; 域控级别&#xff1a;windows server2008R2 主域控&#xff1a;win server 2008R2 辅域控&#xff1a;win server 2016 需求&#xff1a;新购一台win server 2022&#xff0c;需要将主域控迁移到新服务器中&#xff0c;并升级域控级别为最新 检查域控 …

什么软件能去水印?分享三款实用去水印工具

什么软件能去水印&#xff1f;去水印你还在担心会损伤画质或处理不干净&#xff1f;今天分享三款好用的图片去水印工具&#xff0c;手机和电脑软件都有&#xff0c;操作简单&#xff0c;去水印速度快&#xff0c;而且去水印后几乎看不水印痕迹&#xff01; 1、水印云 一款图片编…

贪心算法策略实现

贪心算法 贪心算法&#xff1a;基于某种情况进行一个排序。 贪心算法得到的是优良解&#xff0c;而非全局最优解。需要证明局部最优解 全局最优解 经典贪心算法 —— 会议问题 对于这个问题 &#xff0c;我们提出贪心策略&#xff1a; 策略1&#xff1a;按照会议的持续时间长…

函数声明与函数表达式

函数声明 一个标准的函数声明&#xff0c;由关键字function 、函数名、形参和代码块组成。 有名字的函数又叫具名函数。 举个例子&#xff1a; function quack(num) { for (var i 0; i < num; i) {console.log("Quack!")} } quack(3)函数表达式 函数没有名称…

前端代码提交gitlab出现语法错误无法提交

错误 找到项目里面的.git文件夹 下面有一个hooks 删除pre-commit文件&#xff08;git语法校验代码&#xff09;

人工智能即将彻底改变你使用计算机的方式

文章目录 每个人的私人助理“Clippy 是一个机器人&#xff0c;而不是特工。”卫生保健“一半需要心理健康护理的美国退伍军人没有得到治疗。”教育生产率娱乐和购物科技行业的冲击波技术挑战隐私和其他重大问题 今天我仍然像保罗艾伦和我创办微软时一样热爱软件。但是&#xff…

Nodejs+Vue校园餐厅外卖订餐点餐系统 PHP高校食堂 微信小程序_0u4hl 多商家

对于校园订餐小程序将是又一个传统管理到智能化信息管理的改革&#xff0c;对于传统的校园订餐管理&#xff0c;所包括的信息内容比较多&#xff0c;对于用户想要对这些数据进行管理维护需要花费很大的时间信息&#xff0c;而且对于数据的存储比较麻烦&#xff0c;想要查找某一…

Elasticsearch:向量搜索 (kNN) 实施指南 - API 版

作者&#xff1a;Jeff Vestal 本指南重点介绍通过 HTTP 或 Python 使用 Elasticsearch API 设置 Elasticsearch 以进行近似 k 最近邻 (kNN) 搜索。 对于主要使用 Kibana 或希望通过 UI 进行测试的用户&#xff0c;请访问使用 Elastic 爬虫的语义搜索入门指南。你也可以参考文章…

【嵌入式】开源shell命令行的移植和使用(2)——letter-shell

目录 一 背景说明 二 移植准备 三 移植过程 四 自定义命令 五 实际使用 一 背景说明 之前使用过一款开源shell工具 nr_micro_shell &#xff08;【嵌入式】开源shell命令行的移植和使用&#xff08;1&#xff09;——nr_micro_shell-CSDN博客&#xff09;&#xff0c;感觉…