有如下工具类,返回了一个 render 函数使用h
创建了vnode
import { h } from 'vue';
import SvgIcon from '@/components/custom/SvgIcon.vue';
/**
* 图标渲染
* - 用于 vue 的 render 函数
*/
export const useIconRender = () => {
interface IconConfig {
/**
* 图标名称(iconify 图标的名称)
* - 例如:mdi-account 或者 mdi:account
*/
icon?: string;
/**
* 本地 svg 图标文件名(assets/svg-icon 文件夹下)
*/
localIcon?: string;
/** 图标颜色 */
color?: string;
/** 图标大小 */
fontSize?: number;
}
interface IconStyle {
color?: string;
fontSize?: string;
}
/**
* 图标渲染
* @param config
* @property icon - 图标名称(iconify 图标的名称), 例如:mdi-account 或者 mdi:account
* @property localIcon - 本地 svg 图标文件名(assets/svg-icon 文件夹下)
* @property color - 图标颜色
* @property fontSize - 图标大小
*/
const iconRender = (config: IconConfig) => {
const { color, fontSize, icon, localIcon } = config;
const style: IconStyle = {};
if (color) {
style.color = color;
}
if (fontSize) {
style.fontSize = `${fontSize}px`;
}
if (!icon && !localIcon) {
window.console.warn('没有传递图标名称,请确保给 icon 或 localIcon 传递有效值!');
}
return () => h(SvgIcon, { icon, localIcon, style });
};
return {
iconRender
};
};
在我的组件里使用了这个函数
const icon = useIconRender();
const node = icon.iconRender({ icon: "ant-design:vertical-left" });
可是我要怎么把这个东西渲染到页面上呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.