web前端之若依vue3不能及时获取字典值的解决方案、二次封装若依自带的获取字典方法、watchEffect、watch

本文主要是介绍web前端之若依vue3不能及时获取字典值的解决方案、二次封装若依自带的获取字典方法、watchEffect、watch,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MENU

  • 前言
  • watch和watchEffect的区别
  • 解决若依vue3不能及时获取字典值


前言

因为请求字典的过程是异步
所以没能及时获取到字典数据


watch和watchEffect的区别

基本使用

const { a_type, b_type } = proxy.useDict("a_type", "b_type");
watch(() => a_type.value, (newVal) => {console.log('newVal: ', newVal);// Proxy(Array) {0: {…}, 1: {…}, 2: {…}}
});
watchEffect(() => {console.log('a_type: ', a_type.value);// Proxy(Array) {}// Proxy(Array) {0: {…}, 1: {…}, 2: {…}}
});

1、watch只在有值的时候触发
2、watchEffect只要值有变动就会触发


使用场景

watch适用于监听特定数据的变化,并在数据变化时执行回调函数。可以监视一个或多个特定的数据,并在它们变化时执行自定义的逻辑。
watchEffect则更适合于“副作用”式的场景,会自动追踪其回调函数内部用到的响应式数据,并在这些数据变化时重新运行回调函数。


用法
watch

watch(source, callback, options?)
source: 要监视的数据源,可以是一个函数或一个ref/reactive对象。
callback: 当source变化时执行的回调函数。
options: 可选参数,用于配置watch的行为。


watchEffect

watchEffect(effect, options?)
effect: 一个包含响应式数据访问的函数,Vue会追踪此函数的依赖关系。
options: 可选参数,用于配置watchEffect的行为。


自动追踪依赖

watch需要明确指定要监视的数据,它不会自动追踪数据的依赖。
watchEffect会自动追踪其回调函数内部使用的响应式数据,无需手动指定依赖。


返回值

watch的返回值是一个用于停止观察的函数。
watchEffect不直接返回一个停止观察的函数,但可以使用stop函数来停止副作用的运行。


演示

import { ref, watch, watchEffect } from 'vue';const data = ref(1);// watch的用法
const stopWatch = watch(data, (newValue, oldValue) => {console.log(`watch - Data changed: ${oldValue} -> ${newValue}`);
});// watchEffect的用法
const stopWatchEffect = watchEffect(() => {console.log(`watchEffect - Data value: ${data.value}`);
});// 修改数据,触发watch和watchEffect
data.value = 2;// 停止watch和watchEffect的观察
stopWatch();
stopWatchEffect();

在上面的例子中,watch显式地监视了data的变化,而watchEffect自动追踪了回调函数内部对data的访问。


解决若依vue3不能及时获取字典值

繁杂的dict写法

若依框架的使用方式与上面相同,此案例是个人自己封装的结果,解决了字典复用问题。

const { proxy } = getCurrentInstance();let dict = reactive({aTypeOption: [],bTypeOption: [],
});/*** 获取字典数据*/
async function handleDicts() {let obj = {aTypeOption: "a_type",bTypeOption: "b_type",};for (const key in obj) {if (Object.hasOwnProperty.call(obj, key)) {let result = proxy.useDict(obj[key]);// 第二次进入组件能及时获取到数据// 所以watch不会被触发if (result[obj[key]].value) dict[key] = result[obj[key]].value;watch(() => result[obj[key]].value, (newVal) => {dict[key] = newVal;});}}
}handleDicts();

dict变量的另一种实现方法

let dict = reactive({aType: {option: [],dict: 'a_type'},bType: {option: [],dict: 'b_type'},
});

这篇关于web前端之若依vue3不能及时获取字典值的解决方案、二次封装若依自带的获取字典方法、watchEffect、watch的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/667643

相关文章

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过