Skip to content

UseRender - 渲染

组件介绍

UseRender 是基于 Vue3 + TypeScript 自研的通用内容渲染组件,是 UseElInput 和 UseElForm 组件内部核心依赖组件,可灵活处理字符串、VNode、Vue 组件(同步 / 异步)等多种类型的内容渲染需求,通过精准的类型判断和差异化渲染逻辑,统一各类内容的渲染方式,降低多类型内容渲染的开发成本与维护复杂度。

核心亮点

  1. 多类型内容一站式渲染
  2. 精准的类型判断逻辑
  3. 类型安全与 TS 强约束
  4. 差异化渲染策略
  5. 轻量无冗余

解决痛点

  1. 多类型内容渲染「逻辑分散、代码冗余」

痛点:原生开发中,字符串、VNode、Vue 组件(同步 / 异步)的渲染需编写不同的模板逻辑和判断条件,代码冗余且易维护性差,新增 / 修改渲染类型需频繁改动模板。

解决方案:组件封装所有类型的渲染逻辑,外部仅需传入 content 参数即可完成渲染,无需编写分散的模板判断逻辑,新增 / 修改渲染类型仅需调整组件内部判断逻辑,外部模板无需改动。

  1. Vue 组件识别「判断不准、渲染异常」

痛点:手动判断 Vue 组件(尤其是异步组件)时,易因判断条件不全面(如仅判断是否为对象)导致误判,将 VNode、普通对象等识别为组件,最终引发渲染异常。

解决方案:内置 isComponent 计算属性,先排除 VNode、字符串类型,再通过检测组件核心的 render/setup 函数存在性判断是否为 Vue 组件,精准识别同步 / 异步组件,避免因误判导致的渲染错误。

  1. 入参类型「无约束、运行时易出错」

痛点:原生开发中未对渲染内容做类型约束,可能传入数字、纯对象、数组等非法类型,导致页面渲染空白或报错,且问题需到运行时才能发现,排查成本高。

解决方案:基于 TypeScript 定义 contentType 类型,明确限定 content 入参仅支持 string | VNode | Component,开发阶段通过 TS 校验拦截非法类型传入,提前规避运行时异常。

  1. HTML 字符串与组件渲染「逻辑冲突、适配性差」

痛点:富文本 HTML 字符串需用 v-html 渲染,组件需用<component>渲染,手动切换两种渲染方式时易出现逻辑漏洞,如字符串被错误识别为组件导致渲染失败。

解决方案:采用分层判断逻辑(先判断组件 / VNode 类型,再判断字符串类型,最后处理非法类型),组件 / VNode 走<component :is="content">原生渲染,字符串走 v-html 渲染,不同类型渲染逻辑互不干扰,兼容各类展示场景。

  1. 非法类型内容「无提示、排查困难」

痛点:传入不支持的内容类型时,原生开发通常仅显示空白,无法直观判断是内容为空还是类型错误,需逐行排查代码定位问题根源,效率低。

解决方案:对非法类型内容渲染红色错误提示文本,明确告知支持的内容类型(同步组件 / 异步组件 / VNode / 字符串),帮助开发者快速识别并修复内容类型错误。

使用

Types

js
import type { VNode, Component } from 'vue'

/**
 * 内容类型
 */
export type contentType = string | VNode | Component

/**
 * props接口
 */
export interface Props {
  /**
   * 渲染内容 必传
   */
  content: contentType
}

Props

js
defineProps<Props>()

基于 MIT 许可发布