首页 > 其他分享 >简易化解vue3中store存储与使用的响应式问题

简易化解vue3中store存储与使用的响应式问题

时间:2024-09-15 21:04:26浏览次数:1  
标签:存储 const storeToRefs value cartList vue3 import store

今日在写网站的时候遇见一个大坑,在使用vue3渲染数据的时候发现,在先取store后,又有了修改store中的数据时出现的没有预想的响应式更改

那么我有了一下步骤

  1. 从存储段设置log,探查是否真正存储到了数据(因为网页版的vue插件有一些bug,不能全靠它来观察数据变化)

  2. 发现存储没有问题,再次探查数据获取端,发现获取端的数据为空,但是存在
    反思:确实有创建此数据,经此发现store并无大问题

3.反思一下逻辑,整个逻辑确实出现了先获取数据再修改数据的问题

那么思路清晰了,就是解决获取端的数据相应问题嘛

先说结论:

无非获取的是响应式数据,我们确保store中使用ref或 reactive 来创建数据对象后

在获取端只使用 storeToRefs解构出数据,然后用computed解决计算数据的响应式化问题即可

本次错误的代码

store:

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

export const useCartStore=defineStore("cart",()=>{
    const cartList=ref([])

    const cartListAdd=(data)=>{
       const item = cartList.value.find((item)=>data.skuId==item.skuId)
       if(item!=null&&item!=""){
        item.count+=data.count;
       }else{
        cartList.value.push(data)
        console.log("eye",cartList.value);
       }

    }
    return{
        cartList,cartListAdd
    }
})

获取端:

<script setup> 
// import {getCategoryAPI} from "/src/apis/layout.js"
import {ref, onMounted } from "vue"
import { useCategoryStore } from "@/stores/category";
import { storeToRefs } from "pinia";
import { useCartStore } from "@/stores/cart";
const {dataList}=storeToRefs(useCategoryStore());
const num=ref(0)
const cartStore =(useCartStore());
if(cartStore!=null&&cartStore.cartList.value.length!=null&&cartStore.cartList.value.length!=""){
    num.value=storeToRefs(cartStore.cartList.value.length);
}else{
    num.value=0
}
onMounted(()=>{

})

现象是num和cartStore中的都没有响应式化

解决办法:

针对cartStore中的cartList,他在store中是有定义的,我们用storeToRefs来解决响应式化的问题

针对num他是计算得来的,我们用computed来进行响应式计算

<script setup> 
// import {getCategoryAPI} from "/src/apis/layout.js"
import {ref, onMounted,computed } from "vue"
import { useCategoryStore } from "@/stores/category";
import { storeToRefs } from "pinia";
import { useCartStore } from "@/stores/cart";
const {dataList}=storeToRefs(useCategoryStore())
const {cartList} =storeToRefs(useCartStore());
const num = computed(() => cartList.value.length);
onMounted(()=>{
})

标签:存储,const,storeToRefs,value,cartList,vue3,import,store
From: https://www.cnblogs.com/fubai/p/18415623

相关文章

  • 自研electron32+vue3+arcoDesign桌面OS系统应用-源码版
    Vue3-ElectronWinOS:基于最新前端跨平台技术electron32.x整合高性能构建工具vite5.js搭建的一款高颜值桌面端os管理系统程序。整个项目采用vue3setup语法糖编码开发,全新封装electron多窗口栅格引擎。【源码版】Electron32+Vue3+ArcoDesign桌面版os系统模板功能特性......
  • 这可能是最清晰的AI存储数据流动图解
    之前小编也写过多篇AI存储相关的文章,包括AI背景与分层存储的分析,以及AI存储重点从训练转向推理等内容。具体参考:深度剖析:AI存储架构的挑战与解决方案存储正式迈入超大容量SSD时代!业内有很多关于AI不同解读对存储需求的分析,每家都有画对应的示意图。在这么多厂商的分析......
  • sign与unsigned的原理、数据存储与硬件的关系
    目录关键字unsigned和signed数据在计算机中的存储原码与补码的转化与硬件关系原,反,补的原理:整型存储的本质变量存取的过程类型目前的作用十进制与二进制快速转换大小端字节序判断当前机器的字节序"负零"(-128)的理解截断建议在无符号类型的数值后带上u,关键字unsigned和signe......
  • oracle 存储加数据检查
    在Oracle数据库中,可以使用存储过程和触发器来实现数据检查。以下是一个简单的例子,展示了如何使用触发器来在数据插入之前进行数据检查。假设我们有一个名为orders的表,其中包含order_id和order_amount两个字段。我们想确保每个order_id都是唯一的,且order_amount大于零......
  • Docker 网络和存储
    Docker的网络和存储功能是其重要的组成部分,它们分别处理容器之间的通信和数据持久化。下面我们逐一介绍Docker的网络和存储。Docker网络Docker提供了一套灵活且强大的网络选项,用于处理容器间、容器与主机及容器与外部网络的连接需求。网络类型**Bridge网络(桥接网络)**:......
  • 整数在内存中的存储&&原码反码补码
    目录1.整数在内存中以二进制的形式存在1.1(正数存储情况)1.2负数存储情况1.3整数的补码如何得到原码2.无符号整数的原反补码 小心!VS2022不可直接接触,否则!没这个必要,方源面色淡然一把抓住!顷刻炼化! 1.整数在内存中以二进制的形式存在1.1(正数存储情况)比如说数字2......
  • char 的整数存储解释
    目录1.原因讲解1.有符号类型的char2.无符号类型的char(0-255) 练习题1. 练习题2.练习题3.小心!VS2022不可直接接触,否则!没这个必要,方源面色淡然一把抓住!顷刻炼化! 1.原因讲解1.有符号类型的char我们知道char类型只有一个字节,一个字节是8bit位在计算机中,计算机......
  • String存储原理
    1.是什么        在Java中,String是一种特殊的类,它是不可变的并且存储在堆内存中。为了理解String的存储原理,我们需要分解几个关键概念:不可变性、堆内存、字符串常量池和垃圾回收机制。下面我将详细解释这些概念并举例说明。不可变性(Immutability)    Stri......
  • VUE框架Vue3组件切换页面准备------VUE框架
    <template><divclass="s1"><h1>我是App组件</h1><YeYe></YeYe></div></template><script>importYeYefrom"./components/YeYe.vue";exportdefault{name......
  • JAVA毕业设计171—基于Java+Springboot+vue3+小程序的宠物店小程序系统(源代码+数据库
    毕设所有选题:https://blog.csdn.net/2303_76227485/article/details/131104075基于Java+Springboot+vue3+小程序的宠物店小程序系统(源代码+数据库)171一、系统介绍本项目前后端分离(可以改为ssm版本),分为用户、店员、管理员三种角色1、用户:注册、登录、宠物购买(评论......