vue3 中隐藏的实用API
在实际项目中,我们通常会封装一些工具类,如判断数组、对象、函数等……
然而在 vue3 已经内置了很多常用的工具函数,因此我们不必再重复造轮子
camelize 转骆驼
import { camelize } from "vue";
camelize("foo-bar"); // fooBar
hyphenate 大写字母用 - 连接
import { hyphenate } from "@vue/shared";
hyphenate("HelloWorld"); // hello-world
capitalize 首字母大写
import { capitalize } from "vue";
capitalize("hello world"); // Hello world
remove 删除数组指定的元素
import { remove } from "@vue/shared";
const arr = ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
remove(arr, 'bbb') // ['aaa', 'ccc', 'ddd', 'eee']remove(arr, 'eee') // ['aaa', 'ccc', 'ddd']remove(arr, 'aaa') // ['ccc', 'ddd']
判断对象
import {
isArray,
isMap,
isSet,
isDate,
isFunction,
isString,
isSymbol,
isPromise,
isObject, // 包括数组
isPlainObject, // 不包括数组
} from "@vue/shared";
isObject([]); // trueisObject({}); // trueisObject(null); // falseisPlainObject([]); // falseisPlainObject({}); // trueisPlainObject(null); // false
isOn 判断是否事件
import { isOn } from "@vue/shared";
isOn("onClick"); // trueisOn("onclick"); // falseisOn("onMove"); // trueisOn("onmove"); // falseisOn("aaaaaa"); // false
normalizeClass 正常化 class,可传入 字符串、对象、数组,最终返回字符串
import { normalizeClass } from "vue";
normalizeClass('container') // containernormalizeClass(['container', 'box', 'list']) // container box listnormalizeClass({ container: true, box: false, list: true }) // container list// "item btn empty box ul"normalizeClass([
'item',
null,
['btn', 'empty'],
{
box: true,
ul: true,
li: false
}
])
normalizeStyle 正常化 style,可传入 字符串、对象、数组,最终返回字符串或对象
import { normalizeStyle } from "vue";
normalizeStyle('width: 100px; height: 100px') // width: 100px; height: 100pxnormalizeStyle(['width: 100px', 'height: 100px']) // {width: '100px', height: '100px'}// {width: '60px', height: '60px', color: 'red', top: '10px'}normalizeStyle([
'width: 100px; height: 100px; color: red',
'width: 60px; height: 60px; top: 10px',
])
mergeProps 合并属性,合并规则:
- class 被合并为字符串,合并规则同 normalizeClass
- style 被合并为字符串或对象,合并规则同 normalizeStyle
- 事件 被合并为数组
- 普通属性 会直接覆盖
import { mergeProps } from "vue";
const props1 = {
class: 'aaa',
style: 'width: 100px',
onClick: () => {},
zzzzz: 'sss'
}
const props2 = {
class: 'bbb',
style: 'height: 100px',
onClick: () => {},
zzzzz: 'xxx'
}
const props3 = mergeProps(props1, props2)
console.log(props3)
isVNode 判断是否虚拟节点
import { isVNode } from "vue";
isVNode(<div>哈哈哈</div>) // trueisVNode('哈哈哈') // false
cloneVNode 克隆一个虚拟节点,相同的属性 处理规则同 mergeProps
import { cloneVNode } from "vue";
const vnode1 = <div class="aaa" style="width: 100px">哈哈哈</div>const vnode2 = cloneVNode(vnode1, {
class: 'bbb',
style: 'height: 100px'
})
vnode2; // <div class="aaa bbb" style="width: 100px; height: 100px;">哈哈哈</div>
useCssVars 为组件的根节点添加 css 变量,仅在 单文件组件 中有效
<template><div class="text">哈哈哈</div></template><script setup>import { useCssVars, reactive } from 'vue'const cssVariable = reactive({
color: 'red',
fontSize: '32px',
bg: '#3db6ff',
radius: '100px'
})
useCssVars(vm => cssVariable)
</script><style>.text {
color: var(--color);
font-size: var(--fontSize);
width: var(--radius);
height: var(--radius);
border-radius: var(--radius);
background-color: var(--bg);
}
</style>
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
内容推荐
27 岁,我终于做出了自己的游戏!但是一行代码都没写
5
最近在使用ChatGPT/Codex过程中发现了一个官方bug:高频日志写盘,会损坏电脑磁盘的寿命。桌面版和CLI都有这个问题,目前最新版的ChatGPT/Codex还没有彻底解决这个问题(虽然官方自称已经修复了,但实测还是有高频日志写盘问题)。建议使用下面这段提示词发给AI让它检查和修复:帮我检查 ~./codex/logs_2.sqlite 是否因 TRACE 日志持续高频写盘;如果中招,先备
1
codex
2
Day 1✅ 今天做了:今日学习JVM八股⏰ 明天计划:复习Java基础 并发 集合 JVM AI八股📚 今日感悟:
0
Day 9✅ 今天做了:学习claude源码解析前四章,学习MySQL八股,复习前面记录的ai难点⏰ 明天计划:学习python教程,算法题,MySQL八股📚 今日感悟:加油
0
作者分享
react 渲染 markDown 文档,使用虚拟列表优化
12
大家好,我是Tang,加入多久了呢?我已经续费上了,你们懂吧 ,但是一直没自我介绍,本人不太会说话,说话也比较直,有啥说啥,就简单说两句吧,既然让我说几句呢,那我就说几句。也是想了想啊,说哪几句呢,那我就说这几句。那么我相信啊,这几句呢,嗯也是比那几句强。我今天呢,就先说这几句。那么如果大家觉得啊说这几句不够全面啊,将来呢再给我补充几句。 本人大专, 毕业于2021年6月,大二疫情期间在家上网课的
3
#自我介绍#
大家好,我是Tang,加入多久了呢?我已经续费上了,你们懂吧[坏笑],但是一直没自我介绍,本人不太会说话,说话也比较直,有啥说啥,就简单说两句吧,既然让我说几句呢,那我就说几句。也是想了想啊,说哪几句呢,那我就说这几句。那么我相信啊,这几句呢,嗯也是比那几句强。我今天呢,就先说这几句。那么如果大家觉得啊说这几句不够全面啊,将来呢再给我补充几句。
本人大专,
毕业于2021年6月,大二疫情期间在家上网课的时候同时也在家远程实习,课基本没上,所以就大二下学期成绩第二(其他学期肯定第一啦)[猪头],然后,
2020年12月开始第二份实习一直到毕业,
2021年7月,毕业后的第一份前端工作,小公司,
2022年6月,由于公司一直没什么盈利,宣布准备解散开发部门,然后,我没了,2022年7月,去面试中级前端开发工程师,由于两个堆栈问题没答上来,就没通过,2022年9月,入职一家新公司,也是前端,小公司,我来之前公司50-60人,现在10个,目前拿着7k的工资,干10几k的活
目前自己的主打项目:《https://wx.zsxq.com/mweb/views/weread/search.html?keyword=夜读》还在紧张开发中,前端界面完成30%左右,后端:0%,
由于后端属于初学者,有 golang,和nest.js,golang是第二份实习老板叫学的,因为要写开发文件给老板自动生成接口,而且每周五老板都会培训golang,
就先说这两句[发抖]
10
golang位运算:输入一个int32输出其二进制形式
5
兄弟们,它漏出犄角了,原来CSS才是隐藏的小黑子
13
