前端学习笔记 6:Pinia

news2024/11/16 21:52:30

前端学习笔记 6:Pinia

Pinia 是 Vue 的一个官方库,用于状态管理。

1.安装

首先创建一个 Vue3 项目,具体方式可以参考这里。

安装 Pinia:

npm install pinia

创建一个 pinia 实例 (根 store) 并将其传递给应用:

import './assets/main.css'

import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'

const pinia = createPinia()
const app = createApp(App)
app.use(pinia)
app.mount('#app')

2.定义 Store

import { defineStore } from "pinia"
export const useCounterStore = defineStore('counter', {
    state: () => ({ count: 0 }),
    getters: {
        double: (state) => state.count * 2,
    },
    actions: {
        increment() {
            this.count++
        },
    },
})

通过函数defineStore定义 Store,返回值useCounterStore同样是一个函数,且通常以useXXXStore的方式命名。第一个参数是 Store 的名称,第二个参数是对象,其中包含三部分:

  • state:Store 的状态(数据)
  • getters:计算属性(类似于computed的返回值)
  • actions:Store 的方法

通常,会使用更简洁的组合式 API 进行定义:

import { defineStore } from "pinia";
import { computed,ref } from "vue";
export const useCountStore = defineStore('count', () => {
    // 定义 state
    const count = ref(0)
    // 定义 getter
    const doubleCount = computed(() => { return count.value * 2 })
    // 定义 action
    const increment = () => {
        count.value++
    }
    return {count, doubleCount, increment}
})

3.使用 Store

<script setup>
import {useCountStore} from '@/stores/count'
const countStore = useCountStore()
</script>
<template>
    <button @click="countStore.increment">{{ countStore.count }}</button>
    <div>{{ countStore.doubleCount }}</div>
</template>

4.异步 Action

Store 的 Action 中不仅可以定义同步方法,也可以定义异步方法:

import axios from "axios";
import { defineStore } from "pinia";
import { ref } from "vue";

const API_URL = 'http://geek.itheima.net/v1_0/channels'
export const useListStore = defineStore('list', ()=>{
    const list = ref([])
    const getList = async ()=>{
        const result = await axios.get(API_URL)
        list.value = result.data.data.channels
    }
    return {list, getList}
})

使用异步方法的方式与同步方法相同:

<script setup>
import {useListStore} from '@/stores/list'
const listStore = useListStore()
listStore.getList()
</script>
<template>
    <li v-for="channel in listStore.list" :id="channel.id">{{ channel.name }}</li>
</template>

5.解析 Store

像上面展示的那样,通常都需要在使用 Store 时使用.操作符引用其属性或方法,你可能期望使用解析操作符对 Store 对象解析,以更方便地使用:

<script setup>
import {useCountStore} from '@/stores/count'
const countStore = useCountStore()
const {count, doubleCount, increment} = countStore
</script>
<template>
    <button @click="increment">{{ count }}</button>
    <div>{{ doubleCount }}</div>
</template>

实际上这段示例是有 bug 的,因为这里的countStore解析后,获取的属性countdoubleCount都是普通数值,而不是响应式数据(Ref 对象),所以并不会随着点击按钮而发生变化。

要想从 Store 中解析出响应式数据,要使用storeToRefs函数包裹 Store 实例:

<script setup>
import { useCountStore } from '@/stores/count'
import { storeToRefs } from 'pinia'
const countStore = useCountStore()
const { increment } = countStore
const { count, doubleCount } = storeToRefs(countStore)
</script>
<template>
    <button @click="increment">{{ count }}</button>
    <div>{{ doubleCount }}</div>
</template>

需要注意的是,storeToRefs方法返回的对象中是不包含 Store 的 Action 的,所以要以解析的方式获取方法依然要解析原始的 Store 实例。

6.debug

对 Store 相关的数据 debug 可以使用 Vue 的 debug 插件 Vue.js devtools - Microsoft Edge Addons:

image-20240109141320265

7.参考资料

  • 黑马程序员前端Vue3小兔鲜电商项目实战

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

金和OA C6 upload_json 任意文件上传漏洞

产品介绍 金和网络是专业信息化服务商,为城市监管部门提供了互联网监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 漏洞概述 金和 OA C6 upload_json接口处存在任意文件上传漏洞&#xff0c;攻击者可以通过构造特殊请求包上…

消息队列-RockMQ-Demo案例拓展输入输出渠道

基于Spirng Cloud Alibaba基础搭建 下面为一个Demo 生产者和消费者是一起的。 父工程pom <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.com…

如何使用TrafficWatch根据PCAP文件监控和分析网络流量

关于TrafficWatch TrafficWatch是一款功能强大的网络数据包嗅探和分析工具&#xff0c;该工具能够帮助我们通过PCAP文件监控和分析目标网络中的网络通信流量。除此之外&#xff0c;该工具还可以为广大研究人员提供针对各种网络协议的内部分析功能&#xff0c;并帮助解决各种网…

初始Linux(部署项目)

Linux学什么 作为一名主学Java的小白&#xff0c;主要学一下三个部分&#xff1a; 1.基础命令 使用图形命令是使用Linux的重要基础。并且有很多好处&#xff0c;如可以节省系统、网络资源&#xff0c;能够批量处理工作等等。 2.系统编程 & 网络编程 由于Java跨平台的特…

【unity小技巧】FPS游戏实现相机的偏移震动、武器射击后退和后坐力效果

最终效果 文章目录 最终效果前言相机偏移震动相机震动脚本换弹节点震动 武器射击后退效果武器后坐力效果完结 前言 关于后坐力之前其实已经分享了一个&#xff1a;FPS游戏后坐力制作思路 但是实现起来比较复杂&#xff0c;如果你只是想要简单的实现&#xff0c;可以看看这个&…

网络通信(12)-C#TCP客户端封装帮助类实例

本文使用Socket在C#语言环境下完成TCP客户端封装帮助类的实例。 实例完成的功能: 客户端与服务器连接,实现实时刷新状态。 客户端接收服务器的数据。 客户端发送给服务器的数据。 客户端实时判定状态,断开连接后自动重连。 客户端与服务器端发送心跳包。 在VS中创建C…

Mysql 恢复误删库表数据

一、前提 1、如果你的数据库有备份文件&#xff0c;自己还原即可。 2、如果没有备份文件&#xff0c;那首先检查下你的 binlog 是否开启。如果未开启&#xff0c;那你就不用往下看了。如果开启了&#xff0c;可以往下看看。 1.1 查看位置 可以通过以下的命令查看是否开启了 bi…

机器学习:手撕 AlphaGo(二)

计算机下围棋的问题描述请见上篇&#xff1a;机器学习&#xff1a;手撕 AlphaGo&#xff08;一&#xff09;-CSDN博客 3. MCTS 算法介绍 MCTS&#xff08;Monte Carlo Tree Search&#xff09; 算法的中文名称叫做蒙特卡洛树搜 索。第一次接触这个算法时&#xff0c;便惊叹于它…

使用echarts制作柱状图、折线图,并且下方带表格

实现效果: 调试地址: https://echarts.apache.org/examples/zh/editor.html?cline-simple 源码: option { title: { left: center, top: 0, text: 2022-05月 制造产量 达成情况(单位: 吨) (图1)\n\n集团目标产量: 106,675吨 集团实际产量: 2,636吨, text…

NVIDIA官网如何下载所有历史版本的驱动,包括上古化石版本?

NVIDIA官网如何下载所有历史版本的驱动&#xff0c;包括上古化石版本&#xff1f; 1.软件环境⚙️2.问题描述&#x1f50d;3.解决方法&#x1f421;4.结果预览&#x1f914; 1.软件环境⚙️ Windows10 教育版64位 GeForce GTX 1060 (Notebooks) Chrome 120.0.6099.199&#xff…

Linux限制用户可用硬盘空间

为了防止某个用户占用大量资源导致其他用户无法正常使用&#xff0c;一般会对单个用户可占用资源进行限制。就磁盘限额&#xff0c;XFS文件系统原生支持目录级别的限制。ext文件系统不支持目录限制&#xff0c;曲线方式是限制用户的总占用空间。 本文介绍使用quota程序限制用户…

【银行测试】金融项目测试注意点汇总,一篇带你不再背锅

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、数据保护 在测…

vue3 +TS 安装使用router路由模块

一.安装 1.下载安装依赖 npm install vue-routernextnpm install types/vue-router2.router目录创建 在src 目录下 创建 /src/router文件夹 包含两个文件 route.ts import { RouteRecordRaw } from vue-routerconst routes: Array<RouteRecordRaw> [{path: /,name:…

Pytorch种torch.cat与torch.stack的区别

torch.cat 和 torch.stack 是 PyTorch 中用于拼接张量的两个不同的函数&#xff0c;它们的主要区别在于拼接的方式和创建的维度。 torch.cat&#xff1a; 拼接方式&#xff1a; torch.cat 是按照给定的维度&#xff08;dim 参数&#xff09;将多个张量沿着该维度拼接。在拼接的…

快手在线查权重源码,附带查询接口

源码介绍 新增了用户访问 IP 和时间的统计功能。要使用此功能&#xff0c;只需将“bygoukai.sql”数据库导入源码中&#xff0c;然后修改“config.php”文件中的数据库用户名、密码和数据库名即可。如果需要修改水印&#xff0c;可以在第40行进行更改。要修改查询限制&#xf…

Qt连接数据库(内含完整安装包)

遇到问题必须多思考 这里是最全的Qt连接数据库步骤 qt下载地址 链接&#xff1a;https://pan.baidu.com/s/1wdnTfyL9MQlNOCrSmIOxrQ?pwddgqi 提取码&#xff1a;dgqi --来自百度网盘超级会员V1的分享 数据库百度网盘地址 链接&#xff1a;https://pan.baidu.com/s/1orCczey…

C#VS2022 打包成安装包

步骤参考&#xff1a;VisualStudio&#xff08;2022&#xff09;- 打包项目文件为.exe安装包_vs2022打包exe-CSDNja 步骤参考上方链接&#xff0c;不过在Application Folder文件夹中加的是\项目名称\bin\Debug\下的全部文件&#xff0c;其他地方一样。 最终生成的安装包在Deb…

蓝桥杯省赛无忧 竞赛常用库函数 课件5 排序

01 sort简介 02 sort的用法 sort(起始地址&#xff0c;结束地址的下一位,比较函数);默认用小于号#include<bits/stdc.h> using namespace std; int main(){int a[1000];int n;//读取数组大小cin>>n;//读取元素for(int i1;i<n;i)cin>>a[i];//对数组进行排…

记录一次接近24万条数据导入Mysql的过程

由于开发项目的需求&#xff0c;之前有部分数据要写入阿里云的表格存储&#xff0c;过了一年多时间&#xff0c;表A的数据量接近24万条&#xff0c;现在需要将表A的数据转到Mysql中。 利用官方工具导出数据后&#xff0c;发现文件里面有238999条数据&#xff0c;文件大小是460…

C++之​虚函数

虚函数是C中的一个重要概念&#xff0c;它主要用于实现多态。在基类中声明一个虚函数&#xff0c;派生类可以重写这个函数&#xff0c;从而实现不同的功能。当基类指针或引用指向派生类对象时&#xff0c;调用虚函数会根据实际对象类型来调用相应的派生类中的函数实现&#xff…