在理论我的项目中,咱们通常会封装一些工具类,如判断数组、对象、函数等……
然而在 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>