【Vue3】StoresTorefs:简化状态管理的实用工具

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢迎在文章下方留下你的评论和反馈。我期待着与你分享知识、互相学习和建立一个积极的社区。谢谢你的光临,让我们一起踏上这个知识之旅!
请添加图片描述

文章目录

  • 🍀概念
  • 🍀作用
  • 🍀优劣
  • 🍀回顾
  • 🍀使用方法
  • 🍀storeToRefs vs ToRefs
  • 🍀结语

在前端开发中,状态管理是一个重要的话题。为了更好地管理组件之间的数据传递和状态变化,我们通常使用一些状态管理工具。在Vue.js中,一个常见的工具是StoresTorefs,它提供了一种简单而有效的方法来管理应用程序的状态。

🍀概念

StoresTorefs是一个Vue.js插件,旨在简化状态管理。它基于Vue的响应式系统,并提供了一种将状态绑定到组件属性的简单方式。通过使用StoresTorefs,您可以轻松地在组件之间共享状态,并确保状态的一致性和可维护性。


🍀作用

StoresTorefs的主要作用是简化状态管理。它提供了一种集中式的方法来管理应用程序的状态,避免了在组件之间传递大量的props和事件,使得代码更加清晰和易于维护。同时,StoresTorefs还提供了一些便利的方法来处理状态的变化,例如异步操作和状态的持久化。


🍀优劣

优点:

简化了状态管理,使代码更加清晰和易于维护。
提供了一种集中式的方法来管理状态,避免了在组件之间传递大量的props和事件。
提供了一些便利的方法来处理状态的变化,例如异步操作和状态的持久化。

缺点:

可能会引入一些额外的复杂性,特别是对于小型应用程序来说可能会显得过于繁琐。
需要一定的学习成本,特别是对于新手来说可能会感到有些困惑。

🍀回顾

承接之前的内容,如果我们想要多次调用lovetalk的话需要怎么做,这里我们只需要在.vue中加上这个

function getLoveTalk(){
    talkStore.getATalk()
  }

同时在store中补上action

actions:{
    async getATalk(){
      // 发请求,下面这行的写法是:连续解构赋值+重命名
      let {data:{content:title}} = await axios.get('https://api.uomg.com/api/rand.qinghua?format=json')
      // 把请求回来的字符串,包装成一个对象
      let obj = {id:nanoid(),title}
      // 放到数组中
      this.talkList.unshift(obj)
    }
  },

当然这里我们也不用忘了引入

import axios from 'axios'
import {nanoid} from 'nanoid'

运行结果如下
请添加图片描述

🍀使用方法

首先我们导入即可

import {storeToRefs} from 'pinia'

之后使用storeToRefs进行结构

const {sum,school,address} = storeToRefs(countStore)

这样子我们的模板就会变得好看了许多

<template>
<div class="count">
    <h2>当前求和为:{{ sum }}</h2>
    <h3>欢迎来到:{{ school }},坐落于:{{ address }}</h3>
<select v-model.number="n">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>
    <button @click="_add"></button>
    <button @click="_jian"></button>
</div>
</template>

完整的代码

<template>
<div class="count">
    <h2>当前求和为:{{ sum }}</h2>
    <h3>欢迎来到:{{ school }},坐落于:{{ address }}</h3>
<select v-model.number="n">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>
    <button @click="_add"></button>
    <button @click="_jian"></button>
</div>
</template>
<script setup lang='ts' name="Count">
    import {ref} from 'vue'
    import {storeToRefs} from 'pinia'
    import {useCountStore} from '@/store/Count'
    const countStore = useCountStore()
    const {sum,school,address} = storeToRefs(countStore)
    let n = ref(1)

    function _add(){
      countStore.increment(n.value)
    }
    function _jian(){
      countStore.sum -= n.value
    }


</script>
<style scoped>
  .count {
    background-color: skyblue;
    padding: 10px;
    border-radius: 10px;
    box-shadow: 0 0 10px;
  }
  select,button {
    margin: 0 5px;
    height: 25px;
  }
</style>

这时有些人会想,使用ToRefs不行么,我们可以来试试,这里我们可以打印一下

console.log(toRefs(countStore))

会发现它将什么方法之类的也进行处理了,而storeToRefs进对数据进行处理
在这里插入图片描述
相对的lovetalk.vue相信大家也会修改了,代码如下

<template>
  <div class="talk">
    <button @click="getLoveTalk">获取一句土味情话</button>
    <ul>
        <li v-for="talk in talkStore.talkList" :key="talk.id">{{talk.title}}</li>
    </ul>
  </div>
</template>

<script setup lang="ts" name="LoveTalk">
  import {reactive} from 'vue'
  import axios from "axios";
  import {nanoid} from 'nanoid'
  import {useTalkStore} from '@/store/LoveTalk'
  import { storeToRefs } from "pinia";
  const talkStore = useTalkStore()
  const {talkList} = storeToRefs(talkStore)
  // 方法
   function getLoveTalk(){
    talkStore.getATalk()
  }
</script>

<style scoped>
  .talk {
    background-color: orange;
    padding: 10px;
    border-radius: 10px;
    box-shadow: 0 0 10px;
  }
</style>

🍀storeToRefs vs ToRefs

针对两者我说明一下两种的区别和联系

StoresTorefs:
    概念:StoresTorefs 是一个 Vue.js 插件,旨在简化状态管理,基于 Vue 的响应式系统,提供了一种将状态绑定到组件属性的简单方式。
    作用目的:主要是简化状态管理,避免在组件之间传递大量的 props 和事件,使得代码更清晰和易于维护。
    优劣:优点是简化了状态管理,提高了代码的可维护性和可读性,缺点是可能会引入一些额外的复杂性。
    使用方法:需要将其添加到 Vue 实例中,然后可以使用 $store 属性来访问状态,并使用 $store.commit 方法来修改状态。

torefs:
    概念:torefs 是一个 JavaScript 库,用于管理和访问一个或多个 Ref 对象的集合。
    作用目的:主要用于管理 Ref 对象,提供了一种便捷的方式来管理和访问多个 Ref 对象。
    优劣:优点是提供了一种集中式的方式来管理 Ref 对象,使得代码更加清晰和易于维护,缺点是可能会增加一些复杂性。
    使用方法:可以通过 torefs.create() 方法来创建一个 Ref 对象的集合,并使用 torefs.get() 方法来访问其中的 Ref 对象。

🍀结语

StoresTorefs是一个非常实用的工具,可以帮助我们简化状态管理,提高代码的可维护性和可读性。尽管它可能会引入一些额外的复杂性,但在大型应用程序中,使用StoresTorefs仍然是一个不错的选择。

上面的官方的表达,对于我们来说,若只对数据处理,storeToRefs还是很好用的

请添加图片描述

挑战与创造都是很痛苦的,但是很充实。

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

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

相关文章

淘宝京东商品详情API接口:打造高效电商数据交互新体验

淘宝京东商品详情API接口&#xff1a;打造高效电商数据交互新体验 随着电商行业的迅猛发展&#xff0c;商家们对于商品详情数据的获取和更新需求日益增长。为满足这一需求&#xff0c;淘宝和京东两大电商巨头纷纷推出了商品详情API接口&#xff0c;为商家提供了高效、便捷的数…

uni-app 小兔鲜儿 Day 6(有作业)

​ 黑马程序员uni-app 小兔鲜儿 项目及bug记录&#xff08;下&#xff09; Day 6&#xff08;有作业&#xff09; 包含视频中提到的作业及最终琐屑代码 Day 6 填写订单页面 相关琐屑代码 <script setup lang"ts"> import { computed, ref } from vue impo…

玩转OurBMC第六期:OpenBMC之传感器配置及使用

栏目介绍&#xff1a;“玩转OurBMC”是OurBMC社区开创的知识分享类栏目&#xff0c;主要聚焦于社区和BMC全栈技术相关基础知识的分享&#xff0c;全方位涵盖了从理论原理到实践操作的知识传递。OurBMC社区将通过 “玩转OurBMC” 栏目&#xff0c;帮助开发者们深入了解到社区文化…

光纤和铜缆:了解不同通信媒介的优势

在现代通信技术中&#xff0c;光纤和铜缆是两种主要的数据传输媒介。它们各有优势和局限性&#xff0c;但都在我们的日常生活中扮演着不可或缺的角色。 左侧&#xff08;网络跳线&#xff09;右侧&#xff08;光纤跳线&#xff09; 一、光纤的原理与优势 ADOP光纤跳线 光纤通信…

LeetCode 1.两数之和(HashMap.containsKey()、.get、.put操作)

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…

U盘惊现USBC乱码文件?别担心,这里有救星!

在数字化时代&#xff0c;U盘作为便捷的数据存储工具&#xff0c;在我们的日常生活和工作中扮演着至关重要的角色。然而&#xff0c;有时我们可能会遭遇一个令人头疼的问题——U盘突然出现了USBC乱码文件。这些乱码文件不仅使得U盘中的数据无法正常读取&#xff0c;还可能意味着…

【氮化镓】GaN HEMTs结温和热阻测试方法

文章《Temperature rise detection in GaN high-electron-mobility transistors via gate-drain Schottky junction forward-conduction voltages》&#xff0c;由Xiujuan Huang, Chunsheng Guo, Qian Wen, Shiwei Feng, 和 Yamin Zhang撰写&#xff0c;发表在《Microelectroni…

鸿蒙Next和鸿蒙4.0开发者如何选择

目录 一、 开头一句话重点落在鸿蒙原生开发&#xff0c;也就是ArkUI、Ability、ArkTS、ArkWeb、ArkData等。不管将来是鸿蒙Next2.0或者鸿蒙6.0都游刃有余。 二、 鸿蒙4.0与鸿蒙Next的共性共性概述详细分析总结 三、HarmonyOS Next与HarmonyOS 4的主要区别内核与兼容性设备与应用…

Spring AOP的实现方式与原理

目录 认识IOC与AOP AOP的实现方式 Aspect注解实现AOP 自定义注解实现AOP Spring AOP原理 代理模式 静态代理和动态代理 JDK动态代理 CGLIB动态代理 Spring AOP实现的哪种代理 认识IOC与AOP IOC又称为控制反转,也就是控制权发生了反转.在传统的程序中,我们是需要自己…

结构体内存对齐

结构体内存对齐的规则 第一个成员在结构体对象的首地址处。其他成员变量要对齐到对齐数的整数倍。结构体对象的总大小是最大对齐数的整数倍。如果结构体内嵌套了结构体&#xff0c;嵌套的结构体对齐到自己的最大对齐数的整数倍处。结构体整个大小就是最大对齐数的整数倍。 对…

JS高级 - Promise使用方法详解

目录 一、什么是Promise 1.1 Promise的三种状态 二、Promise 基本用法 2.1 Promise基本使用 2.2 Promise使用时传参 2.3 Promise 链式调用 2.4 链式调用注意事项 三、Promise内置方法 3.1 Promise.all() 3.2 Promise.race() 3.3 Promise.allSettled() 3.4 Promise.…

1688商家自曝流量暴涨技巧!7天起店,仅需4步神操作!

经常有人问我1688&#xff0c;7天怎么起店&#xff1f;根据之前的一些经验分享一下&#xff0c;大概7天就能做到4位数以下的展现量&#xff0c;4步轻松完成。 新运营课堂第一步&#xff0c;进入卖家工作台&#xff0c;点击商品&#xff0c;查看单品被收藏次数及被加购次数&…

C++--浅拷贝和深拷贝

浅拷贝和深拷贝 1.浅拷贝 浅拷贝,多个指针指向同一段内存,出现一处指针修改数据,其它指针的数据也发生改变。 1.1 面向过程的浅拷贝(C方式) 如下代码: //下面程序,从键盘获取4个字符串,然后输出到屏幕 int main() {char buf[100];char* strArr[4];//长度为4的字符指针数组…

Unity面向切面编程

一直说面向AOP&#xff08;切面&#xff09;编程&#xff0c;好久直接专门扒出理论、代码学习过。最近因为某些原因&#x1f62d;还得再学学造火箭的技术。 废话不多说&#xff0c;啥是AOP呢&#xff1f;这里我就不班门弄斧了&#xff0c;网上资料一大堆&#xff0c;解释的肯定…

广东海洋大学成功部署(泰迪智能科技)大数据人工智能实验室建设

广东海洋大学简称广东海大&#xff0c;坐落于广东省湛江市&#xff0c;是国家海洋局与广东省人民政府共建的省属重点建设大学、广东省高水平大学重点学科建设高校、粤港澳高校联盟成员 &#xff0c;入选卓越农林人才教育培养计划&#xff0c;是教育部本科教学水平评估优秀院校。…

【SQL】数据库SQL语句

1、主键 主键值唯一&#xff0c;不可修改&#xff0c;不能为空&#xff0c;删除不能重用 2、数据类型&#xff08;常用&#xff09; char int float date timestamp 3、select select * from data; select xx,xxx from data;//取部分行 select * from data limit 100; //限…

msyql中的四大日志

日志 错误日志二进制日志作用日志格式日志查看日志删除 查询日志慢查询日志 错误日志 错误日志是MySQL中最重要的日志之一&#xff0c;它记录了当MySQL启动和停止时&#xff0c;以及服务器子啊运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时…

angular node版本问题导致运行出错时应该怎么处理

如下图所示&#xff1a; 处理方式如下&#xff1a; package.json中start跟build中添加&#xff1a;SET NODE_OPTIONS--openssl-legacy-provider即可

SSRF+Redis未授权getshell

SSRFRedis未授权getshell 1.前言 当一个网站具有ssrf漏洞&#xff0c;如果没有一些过滤措施&#xff0c;比如没过滤file协议&#xff0c;gophere协议&#xff0c;dict等协议&#xff0c;就会导致无法访问的内网服务器信息泄露&#xff0c;甚至可以让攻击者拿下内网服务器权限 …

pixhawk控制板的ArduPilot固件编译

0. 环境 - ubuntu18&#xff08;依赖python2和pip&#xff0c;建议直接ubuntu18不用最新的&#xff09; - pixhawk 2.4.8 - pixhawk 4 1. 获取源码 # 安装git sudo apt install git # 获取源码 cd ~/work git clone --recurse-submodules https://github.com/ArduPilot/a…