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 合并属性,合并规则:

  1. class 被合并为字符串,合并规则同 normalizeClass
  2. style 被合并为字符串或对象,合并规则同 normalizeStyle
  3. 事件 被合并为数组
  4. 普通属性 会直接覆盖
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>

https://mp.weixin.qq.com/s?__biz=Mzg3NDgyNDMwNA==&mid=2247483847&idx=1&sn=86dc4d48b5c5aa706b72ed7ca87a595e&chksm=cecb96d8f9bc1fce44abb91004af60d7fe85bd2b5afb8cc584c02b915bd0412a63890acff5c6&token=1425188115&lang=zh_CN#rd

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
鱼友2193
作者分享
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
下载 APP