vue3学习日记1 - Pinia

最近发现职场前端用的框架大多为vue,所以最近也跟着黑马程序员vue3的课程进行学习,以下是我的学习记录

视频网址:

Day2-02.Pinia-counter基础使用_哔哩哔哩_bilibili

学习日记:

vue3学习日记1 - 环境搭建-CSDN博客

vue3学习日记2 - 组合式API基础学习-CSDN博客

vue3学习日记3 - 组合式API练习小案例-CSDN博客

一、Pinia概念

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

优点

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

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

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

4、搭配 TypeScript 一起使用提供可靠的类型判断

二、添加Pinia到Vue项目

1、在要创建新项目的位置地址栏输入cmd

2、输入“npm init vue@latest”

3、用VsCode打开新建项目,安装依赖

4、运行项目

5、查看Pinia官方文档

Home | Pinia 中文文档 (web3doc.top)

查看安装教程

6、安装Pinia

安装成功后,会发现在package.json中有"pinia"

7、将Pinia注入程序根目录

三、Pinia的使用

下面跟着官方文档写一个小案例熟悉一下

1、创建store文件夹,并在里面创建文件counter.js

2、编写counter.js

// 1. 导入defineStore
import { defineStore } from "pinia";
import { ref } from "vue";
// export导出,可以让外部访问
export const useCounterStore = defineStore('counter',()=>{
    // 定义一个变量
    const count = ref(0)
    // 定义一个方法修改数据
    const changeCount = () => {
        count.value++
    }
    // 返回数据
    return {
        count,
        changeCount
    }

})

3、组件使用

<script setup>
// 导入useCounterStore方法
import { useCounterStore } from "@/store/counter";
// 执行方法得到counterStore对象
const counterStore = useCounterStore()
</script>

<template>
  <button @click="counterStore.changeCount">{{ counterStore.count}}</button>
</template>

4、运行结果

四、getters实现

Pinia中的getters直接使用computed函数进行模拟

1、编写counter.js

// 1. 导入defineStore
import { defineStore } from "pinia";
import { computed, ref } from "vue";
// export导出,可以让外部访问
export const useCounterStore = defineStore('counter',()=>{
    // 定义一个变量
    const count = ref(0)
    // 定义一个方法修改数据
    const changeCount = () => {
        count.value++
    }

    // 定义getters
    const getters = computed(() => {
        return count.value*2
    })
    
    // 返回数据
    return {
        count,
        changeCount,
        getters
    }

})

2、App,vue

<script setup>
// 导入useCounterStore方法
import { useCounterStore } from "@/store/counter";
// 执行方法得到counterStore对象
const counterStore = useCounterStore()
</script>

<template>
  <button @click="counterStore.changeCount">{{ counterStore.count}}</button>
  {{ counterStore.getters }}
</template>

3、运行结果

五、action如何实现异步

action中实现异步和组件中定义数据和方法的风格完全一致

1、安装axios插件

2、编写counter.js

// 1. 导入defineStore
import { defineStore } from "pinia";
import { ref } from "vue";
// 导入axios
import axios from "axios";
const url = 'http://geek.itheima.net/v1_0/channels'

// export导出,可以让外部访问
export const useCounterStore = defineStore('counter',()=>{
    // 定义一个数据list
    const list = ref([])
    // 异步action
    const loadList = async () =>{
        // 将后台获取的数据赋值给res
        const res = await axios.get(url)
        list.value = res.data.data.channels
    }
    // 返回数据
    return {
        list,
        loadList
    }

})

3、app.vue

<script setup>
// 导入useCounterStore方法
import { useCounterStore } from "@/store/counter";
import { onMounted } from "vue";
// 执行方法得到counterStore对象
const counterStore = useCounterStore()
// 挂载时访问接口
onMounted(()=>{
  counterStore.loadList()
})
</script>

<template>
  <ul>
    <li v-for="item in counterStore.list" :key="item.id">{{ item.name}}</li>
  </ul>
</template>

4、运行结果

六、storeToRefs,实现响应式

1、直接解构赋值(响应式丢失)

// 执行方法得到counterStore对象
const counterStore = useCounterStore()
const { count , doubleCount } = counterStore

2、方法包裹(保持响应式更新)

const { count , doubleCount } = storeToRefs(counterStore)

注意:

const { count , doubleCount } = storeToRefs(counterStore)
只适用于数据和getter,对于修改数据的方法还是要直接从原来的counterStore中解构赋值
const { increase } = counterStore

七、问题小结

1、Pinia是用来做什么的?

集中状态管理工具,可以替换vuex

2、Pinia中还需要mutation吗?

不需要,只保留了action,并且action即支持同步也支持异步

3、Pinia如何实现getter?

可以用computer计算属性函数

4、Pinia产生的Store如何解构赋值数据保持响应

storeToRefs
注意:
const { count , doubleCount } = storeToRefs(counterStore)
只适用于数据和getter,对于修改数据的方法还是要直接从原来的counterStore中解构赋值
const { increase } = counterStore

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

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

相关文章

IP 地址与蜜罐技术

基于IP的地址的蜜罐技术是一种主动防御策略&#xff0c;它能够通过在网络上布置的一些看似正常没问题的IP地址来吸引恶意者的注意&#xff0c;将恶意者引导到预先布置好的伪装的目标之中。 如何实现蜜罐技术 当恶意攻击者在网络中四处扫描&#xff0c;寻找可入侵的目标时&…

Leetocde516. 最长回文子序列 动态规划

原题链接&#xff1a;Leetocde516. 最长回文子序列 class Solution { public:int longestPalindromeSubseq(string s) {int n s.size();vector<vector<int>> dp(n, vector<int>(n, 1));for (int i 0; i < n; i) {dp[i][i] 1;if (i 1 < n &&…

Linux物理地址到虚拟地址的映射

相关理论&#xff1a; Linux中用户空间是无法直操作寄存器的&#xff0c;需要先将寄存器对应的物理地址通过转换成虚拟地址然后在进行操作。 高性能处理器一般会提供一个内存管理单元&#xff08;MMU&#xff09;,该单元辅助操作系统进行内存管理&#xff0c;提供虚拟地址和物理…

openCvSharp 计算机视觉图片找茬

一、安装包 <PackageReference Include"OpenCvSharp4" Version"4.10.0.20241108" /> <PackageReference Include"OpenCvSharp4.runtime.win" Version"4.10.0.20241108" /> 二、准备两张图片 三、编写代码 using OpenCv…

数字孪生助力智慧机场全方位管理

智慧机场利用图扑可视化技术&#xff0c;实现航班动态、乘客流量和行李追踪的实时监控与分析&#xff0c;优化资源配置&#xff0c;提高运营效率&#xff0c;为旅客提供更加便捷的出行体验。

景联文科技提供高质量多模态数据处理服务,驱动AI新时代

在当今快速发展的AI时代&#xff0c;多模态数据标注成为推动人工智能技术进步的关键环节。景联文科技作为行业领先的AI数据服务提供商&#xff0c;专注于为客户提供高质量、高精度的多模态数据标注服务&#xff0c;涵盖图像、语音、文本、视频及3D点云等多种类型的数据。通过专…

【Docker】入门教程

目录 一、Docker的安装 二、Docker的命令 Docker命令实验 1.下载镜像 2.启动容器 3.修改页面 4.保存镜像 5.分享社区 三、Docker存储 1.目录挂载 2.卷映射 四、Docker网络 1.容器间相互访问 2.Redis主从同步集群 3.启动MySQL 五、Docker Compose 1.命令式安装 …

vscode使用Marscode编程助手

下载 vscode 在插件里下载Marscode编程助手 插件完成 在这里点击安装&#xff0c;点击后这里出现AI编程插件。

使用网页版Jupyter Notebook和VScode打开.ipynb文件

目录 正文 1、网页版Jupyter Notebook查看 2、VScode查看 因为总是忘记查看文件的网址&#xff0c;收藏了但分类众多每次都找不到……当个记录吧&#xff08;/捂脸哭&#xff09;&#xff01; 正文 此处以gitub中的某个仓库为例&#xff1a; https://github.com/INM-6/mu…

腾讯云AI代码助手编程挑战赛-知识百科AI

作品简介 知识百科AI这一编程主要用于对于小朋友的探索力的开发&#xff0c;让小朋友在一开始就对学习具有探索精神。在信息化时代下&#xff0c;会主动去学习自己认知以外的知识&#xff0c;同时丰富了眼界&#xff0c;开拓了新的知识。同时催生了在大数据时代下的信息共享化…

Flutter项目适配鸿蒙

Flutter项目适配鸿蒙 前言Flutter项目适配鸿蒙新工程直接支持ohos构建新项目编译运行 适配已有的Flutter项目 前言 目前市面上使用Flutter技术站的app不在少数&#xff0c;对于Flutter的项目&#xff0c;可能更多的是想直接兼容Harmonyos&#xff0c;而不是直接在重新开发一个…

我的128天创作之路:回顾与展望

大家好呀&#xff01;今天来和你们分享一下我的创作历程&#x1f601;。 一、机缘 最开始创作呢&#xff0c;是因为在学习 C 的 STL 时&#xff0c;像 string、list、vector 这些模板可把我折腾得够呛&#xff0c;但也让我学到了超多东西&#xff01;我就想&#xff0c;要是把我…

AI刷题-数列推进计算任务、数组中的幸运数问题

目录 一、数列推进计算任务 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 优化思路 最终代码&#xff1a; 运行结果&#xff1a; 二、数组中的幸运数问题 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步…

Helm部署activemq

1.helm create activemq 创建helm文件目录 2.修改values.yaml 修改image和port 3. helm template activemq 渲染并输出 4. helm install activemq activemq/ -n chemical-park // 安装 5.启动成功

Windows 下Mamba2 / Vim / Vmamba 环境安装问题记录及解决方法终极版(无需绕过triton)

导航 安装教程导航 Mamba 及 Vim 安装问题参看本人博客&#xff1a;Mamba 环境安装踩坑问题汇总及解决方法&#xff08;初版&#xff09;Linux 下Mamba 及 Vim 安装问题参看本人博客&#xff1a;Mamba 环境安装踩坑问题汇总及解决方法&#xff08;重置版&#xff09;Windows …

力扣25. K个一组反转链表

给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 示例 1&#xff1a; 输入&#xff…

动态规划练习五(子序列问题)

一、解题心得 首先子序列是不连续的&#xff0c;所以一定不会在 i - 1 位置去推 i 位置的 dp 值了&#xff0c;所以一般子序列问题是 O(n^2) 复杂度。但是可以通过哈希表等方式降成 O(n)。 以我带来的例题其实子序列问题可以分成两种&#xff1a; 1、以 i 位置为结尾&#x…

图像处理|膨胀操作

在图像处理领域&#xff0c;形态学操作是一种基于图像形状的操作&#xff0c;用于分析和处理图像中对象的几何结构。**膨胀操作&#xff08;Dilation&#xff09;**是形态学操作的一种&#xff0c;它能够扩展图像中白色区域&#xff08;前景&#xff09;或减少黑色区域&#xf…

汉图科技XP356DNL高速激光打印一体机综合性能测评

汉图科技XP356DNL高速激光打印一体机效率方面表现出色&#xff0c;支持A4纸型的高速打印&#xff0c;单面打印速度高达35页/分钟&#xff0c;自动双面打印速度可达32面/分钟&#xff0c;这样的速度在日常办公中能够极大地提高打印效率&#xff0c;减少等待时间&#xff0c;满足…

Unity + Firebase + GoogleSignIn 导入问题

我目前使用 Unity版本&#xff1a;2021.3.33f1 JDK版本为&#xff1a;1.8 Gradle 版本为&#xff1a;6.1.1 Firebase 版本: 9.6.0 Google Sign In 版本为&#xff1a; 1.0.1 问题1 &#xff1a;手机点击登录报错 apk转化成zip&#xff0c;解压&#xff0c;看到/lib/armeabi-v…