Vue3-TS-Lodash:理解Lodash / 常用方法积累

news2024/9/30 0:05:05

一、Lodash官网

Lodash 简介 | Lodash中文文档 | Lodash中文网

二、理解Lodash

Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。它提供了大量的函数来帮助你处理数组、数值、对象、字符串等,使你的代码更加简洁、易读和高效。Lodash 的设计哲学是让你能够使用函数式编程的方法来操作数据,同时避免修改原始数据(除非明确指定)。

三、Lodash具备哪些能力

序号能力解释
1数组 / Array如过滤、映射、排序、分块、去重、查找、比较等
2集合 / Collection如并集、交集、差集、子集、筛选等
3函数如柯里化、防抖、节流、合成、条件判断等;
4语言提供了一系列用于检查类型、验证值等的函数
5数学如求和、平均数、最大值、最小值、随机数等;
6数字clamp(number, [lower], upper)返回限制在 lower 和 upper 之间的值。
inRange(number, [start=0], end)检查 n 是否在 start 与 end 之间
random([lower=0], [upper=1], [floating])产生一个包括 lower 与 upper 之间的数
7对象如深拷贝、合并、遍历、转换、比较等
8SeqSeq 模块(或称为序列)提供了一种链式调用的方式来处理数据,同时支持惰性计算(Lazy Evaluation),这意味着只有在需要最终结果时,才会执行链中的操作。这种机制可以显著提高处理大数据集时的性能,因为它允许在数据实际被使用之前避免不必要的计算。
9字符串如切割、重复、填充、大小写转换、字符串匹配、转义等;
10实用函数
11Properties
12Methods
Lodash虽然提供了很多方法,但并不意味着在实际开发中一定要全部使用。在使用Lodash时,应根据实际需要选取合适的方法,以提高代码的可读性和执行效率。

四、vue3 ts 项目安装

4.1、安装

pnpm install lodash
pnpm install @types/lodash

4.2、全局引入

在项目的入口文件(main.ts)中全局引入Lodash,并将其挂载。
但请注意,这种方式虽然方便,但可能会增加项目的打包体积,因为Lodash是一个相对较大的库。

main.ts

import _ from 'lodash' 
app.config.globalProperties.$lodash = _ 
import { createApp, getCurrentInstance } from 'vue'
import './style.css'
import '@v3/assets/styles/tailwind.css'
import '@v3/assets/styles/reset.css'
import App from './App.vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import { createPinia } from 'pinia'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
import router from './routers/index'
import { api } from './api/index'
import 'vue-global-api'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import _ from 'lodash' 

const pinia = createPinia()
pinia.use(piniaPluginPersistedstate)
const app = createApp(App)
app.use(ElementPlus)
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  app.component(key, component)
}
app.use(pinia)
app.use(router)
app.config.globalProperties.$api = api
app.config.globalProperties.$lodash = _ 
app.mount('#app')

页面使用

<script setup lang="ts">
let Lodash = internalInstance && internalInstance.appContext.config.globalProperties.$lodash
getUser(params).then((res: any)=>{
    console.log('lodash', Lodash.hasIn(res, ['payload']))
    // true
}
</script>

感觉比较麻烦,后边找找看简便方法

出于性能和打包体积的考虑,通常不推荐全局引入Lodash。更好的做法是按需引入。 

4.3、按需引入

在组件或文件中,根据需要引入Lodash的特定函数。这样做的好处是可以只引入你需要的函数,从而减小项目的打包体积。

<script setup lang="ts">  
import { defineComponent } from 'vue'  
import { debounce } from 'lodash'  
  
// 使用debounce函数  
const handleInput = debounce((value: string) => {  
   console.log(value)  
}, 500)  
</script>  
  
<template>  
  <input type="text" @input="handleInput($event.target.value)" />  
</template>

五、配置TypeScript以支持Lodash

由于你已经安装了@types/lodash,TypeScript应该能够自动识别Lodash的类型定义。但是,如果你在使用TypeScript时遇到了与Lodash相关的类型错误或警告,请确保你的tsconfig.json文件配置正确。特别是,如果你的项目中使用了ES模块导入方式,并且遇到了默认导入的警告,你可能需要在tsconfig.json中添加以下配置

{  
  "compilerOptions": {  
    "allowSyntheticDefaultImports": true,  
    "esModuleInterop": true  
  }  
}

六、常用方法

6.1、hasIn

let result = hasIn(res, ['payload']) ? res.payload : []

对象路径正确 返回 true ,否则 false

<script setup lang="ts">
import { hasIn } from 'lodash'
getUser(params).then((res: any)=>{
    console.log('lodash-hasIn', hasIn(res, ['payload']))
    // true 测试成功
}
</script>

6.2、待补充

更多内容待补充

参考链接

lodash.hasIn | Lodash中文文档 | Lodash中文网

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

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

相关文章

25基于python的文本冒险岛游戏(源码+游戏简介+python代码学习攻略)校园招聘面试

基于python的文本冒险岛游戏&#xff08;源代码游戏简介python代码学习&#xff09;资源-CSDN文库https://download.csdn.net/download/m0_72216164/89817518 开头附上工作招聘面试必备问题噢~~包括综合面试题、无领导小组面试题资源文件免费&#xff01;全文干货。 工作招聘无…

HarmoneyOS--Ability(能力)、窗口、通知

标题 文章目录 一、什么是Ability?二、使用步骤(单例和多例)三、窗口四、通知 一、什么是Ability? 开发模式提供的开发功能抽象的描述。 其中重要的是UiAbility,界面组件能力,负责所有界面的处理。 通过配置可以变更单例,多例,指定实例,在module.json5中进行配置 如: 单例:l…

FreeRTOS的中断管理

前言 FreeRTOS的任务有优先级&#xff0c;MCU的硬件中断有中断优先级&#xff0c;这是两个不同的概念&#xff0c;FreeRTOS的任务管理要用到硬件中断&#xff0c;使用FreeRTOS时候也可以使用硬件中断&#xff0c;但是硬件中断ISR的设计要注意一些设计原则&#xff0c;在本节中我…

RVC变声器入门

主要参考资料&#xff1a; RVC变声器官方教程&#xff1a;10分钟克隆你的声音&#xff01;一键训练&#xff0c;低配显卡用户福音&#xff01;: https://www.bilibili.com/video/BV1pm4y1z7Gm/?spm_id_from333.337.search-card.all.click&vd_sourcedd284033cd0c4d1f3f59a2…

RocketMQ消息发送之广播模式

前言 在前面的文章中我们回顾了RocketMQ的顺序消息和乱序消息&#xff0c;以及里面包含的乱序消息和全局消息&#xff0c;RocketMQ支持多种消息类型和消费模式 今天这篇文章主要介绍RocketMQ的广播消息。希望文章能为正在学习RocketMQ相关知识的大佬们提供帮助&#xff01; 广…

全自动ai生成视频MoneyPrinterTurbo源码 在线ai生成视频源码

介绍&#xff1a; 现在短视频这么火爆&#xff0c;流量就是金钱。 如果能全自动的生成短视频&#xff0c;是不是很容易带来流量&#xff0c;赚到马内。 MoneyPrinter 这个开源项目就可以自动生成短视频&#xff0c;而且质量还不错&#xff0c;不是那种低质的营销视频。 使用…

画个心,写个花!Python Turtle库带你玩转创意绘图!

文章目录 前言一、Turtle 库基础介绍二、画布设置三、画笔属性设置1.画笔颜色设置2.画笔粗细与速度设置3.画笔形状设置 四、画笔移动函数五、画笔控制函数六、实战案例一&#xff1a;“花”字绘制七、实战案例二&#xff1a;心型图案绘制总结 前言 Python 的 turtle 库是一种简…

【MySQL内置数据库】 mysql

目录 统计 columns_priv component db default_roles engine_cost func general_log global_grants gtid_executed help_category help_keyword help_relation help_topic innodb_index_stats innodb_table_stats ndb_binlog_index password_history plugin…

【RocketMQ】SpringBoot整合RocketMQ

&#x1f3af; 导读&#xff1a;本文档详细介绍了如何在Spring Boot应用中集成Apache RocketMQ&#xff0c;并实现消息生产和消费功能。首先通过创建消息生产者项目&#xff0c;配置POM文件引入RocketMQ依赖&#xff0c;实现同步消息发送&#xff0c;并展示了如何发送普通字符串…

STM32+ADC+扫描模式

1 ADC简介 1 ADC(模拟到数字量的桥梁) 2 DAC(数字量到模拟的桥梁)&#xff0c;例如&#xff1a;PWM&#xff08;只有完全导通和断开的状态&#xff0c;无功率损耗的状态&#xff09; DAC主要用于波形生成&#xff08;信号发生器和音频解码器&#xff09; 3 模拟看门狗自动监…

Ract vs Vue 你更喜欢谁?

React 和 Vue 是当今最受欢迎的两个前端框架&#xff0c;各自有其独特的特点和优势。以下是对这两个框架的详细比较和分析&#xff0c;以帮助你了解它们的异同和适用场景&#xff1a; React 简介 React 是由 Facebook 开发和维护的一个开源 JavaScript 库&#xff0c;主要用于…

OpenAI员工流失的背后:地盘争夺、倦怠、薪酬要求

近日&#xff0c;OpenAI的CTO Mira Murati宣布离职&#xff0c;同一天&#xff0c;首席研究官Bob McGrew、研究副总裁Barret Zoph也宣布离职。 据统计&#xff0c;这已经是2024年第11起OpenAI高管离职事件了。 至今&#xff0c;开启“ChatGPT时刻”的四位OpenAI领袖&#xff…

河南移动:核心营业系统稳定运行超300天,数据库分布式升级实践|OceanBase案例

河南移动&#xff0c;作为电信全业务运营企业&#xff0c;不仅拥有庞大的客户群体和业务规模&#xff0c;还引领着业务产品与服务体系的创新发展。河南移动的原有核心营业系统承载着超过6000万的庞大用户量&#xff0c;管理着超过80TB的海量数据&#xff0c;因此也面临着数据规…

扩散模型(2)--1

1.简介 生成模型通过学习并建模输入数据的分布&#xff0c;从而采集生成新的样木&#xff0c;该模型广泛运用于图片视频生成、文本生成和药物分子生成。扩散模型是一类概率生成模型&#xff0c;扩散模型通过向数据中逐步加入噪声来破坏数据的结构&#xff0c;然后学习一个相对应…

在Windows系统上安装的 Boost C++ 库

步骤一 https://www.boost.org/users/history/version_1_86_0.html 下载Boost库文件: 步骤二 安装: https://www.boost.org/doc/libs/1_52_0/doc/html/bbv2/installation.html 点击运行.\bootstrap.bat脚本在当前目录的powershell中执行:./b2 install --prefixPREFIX 然后…

优选拼团平台架构解析与关键代码逻辑概述

一、系统架构设计 唐古拉优选拼团平台采用多层架构设计&#xff0c;主要包括前端展示层、业务逻辑层、数据访问层及数据存储层。 前端展示层&#xff1a;负责用户界面的展示和交互&#xff0c;包括商品列表、拼团详情、订单管理等页面。前端采用现代前端框架&#xff08;如Vue…

第十四周学习周报

目录 摘要Abstract1. LSTM的代码实现2. 序列到序列模型3. 梯度与方向导数总结 摘要 在上周的学习基础之上&#xff0c;本周学习的内容有LSTM的代码实现&#xff0c;通过对代码的学习进一步加深了对LSTM的理解。为了切入到transformer的学习&#xff0c;本文通过对一些应用例子…

JUC高并发编程4:集合的线程安全

1 内容概要 2 ArrayList集合线程不安全 2.1 ArrayList集合操作Demo 代码演示 /*** list集合线程不安全*/ public class ThreadDemo4 {public static void main(String[] args) {// 创建ArrayList集合List<String> list new ArrayList<>();for (int i 0; i <…

铺铜修改后自动重铺

很多初学者对于敷铜操作感到比较麻烦&#xff1a;为什么每次打过孔&#xff0c;修改走线后都需要手动右击-重新修改敷铜。如何提升layout的效率&#xff1f; 版本&#xff1a;Altium Designer 21.9.2 首先&#xff0c;点击面板右边的小齿轮&#xff0c;进入设置 接下来&#…

9.29学习

1.线上问题rebalance 因集群架构变动导致的消费组内重平衡&#xff0c;如果kafka集内节点较多&#xff0c;比如数百个&#xff0c;那重平衡可能会耗时导致数分钟到数小时&#xff0c;此时kafka基本处于不可用状态&#xff0c;对kafka的TPS影响极大 产生的原因 ①组成员数量发…