前端模块化之基础组件

简介: 前端的基础组件,后续的所有组件都是继承该基础组件实现的。

在前端开发过程中组件的抽离是非常有必要的,我们在使用 VueReact 等开发的时候,组件的开发是必须的,我们常常将一些通用的逻辑抽象为组件。
纯前端的开发的时候,我们添加节点有两种方式,一种是使用 appendChild,另一种则是常用的 innerHTML 所以我们的组件都应该做到能够被 appendChildinnerHTML 的形式添加到节点,所以这就需要我们抽离一个基础组件,该组件具有获取组件节点或者节点字符串的函数。基于此,我们的一个基础组件应该类似于下面的:

class Component<T extends HTMLElement> {
  protected el: T

  public constructor(el: string | HTMLElement) {
    this.el = queryElem(el)
  }

  public node() {
    return this.el
  }

  public toString() {
    return this.el.outerHTML
  }
}

其中的 queryElem 用于获取节点,如果传递的 elHTMLElement 节点则直接返回,如果是 string 类型,则表示为 css 选择器,根据选择器获取节点,同时该函数还具有一个回退的,如果没有获取到节点时,则传递一个没有添加到页面的节点,作为承载节点,所以整理后的函数如下:

function queryElem(el: string | HTMLElement, tagName = 'div') {
  let qel: HTMLElement
  // 传递的是 `css` 选择器
  if (typeof el === 'string') {
    if (el.trim() === '') {
      qel = document.createElement(tagName || 'div')
    } else {
      let els = document.querySelector(el)
      if (els != null) {
        qel = els as HTMLElement
      } else {
        qel = document.createElement(tagName || 'div')
      }
    }
  } else {
    // 传递的本来就是节点,则直接返回
    qel = el
  }
  return qel
}

所以整理后的基础组件如下:

class Component<T extends HTMLElement> {
  protected el: T

  public constructor(el: string | HTMLElement, tagName?: string) {
    this.el = queryElem(el, tagName) as T
  }

  public node() {
    return this.el
  }

  public toString() {
    return this.el.outerHTML
  }
}

后续我们的所有的组件都继承该继承节点例如:

class Button extends Component<HTMLButtonElement> {
  public constructor(el: string, config: object){
    super(el)
  }

  public xxx() {
    this.el
  }
相关文章
|
5月前
|
数据采集 前端开发 JavaScript
《花100块做个摸鱼小网站! 》第四篇—前端应用搭建和完成第一个热搜组件
本文档详细介绍了从零开始搭建一个包含前后端交互的热搜展示项目的全过程。通过本教程,读者不仅能学习到完整的项目开发流程,还能掌握爬虫技术和前后端交互的具体实践。适合有一定编程基础并对项目实战感兴趣的开发者参考。
95 1
|
2月前
|
监控 前端开发 数据可视化
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
@icraft/player-react 是 iCraft Editor 推出的 React 组件库,旨在简化3D数字孪生场景的前端集成。它支持零配置快速接入、自定义插件、丰富的事件和方法、动画控制及实时数据接入,帮助开发者轻松实现3D场景与React项目的无缝融合。
200 8
3D架构图软件 iCraft Editor 正式发布 @icraft/player-react 前端组件, 轻松嵌入3D架构图到您的项目,实现数字孪生
|
5月前
|
JavaScript 前端开发 开发者
哇塞!Vue.js 与 Web Components 携手,掀起前端组件复用风暴,震撼你的开发世界!
【8月更文挑战第30天】这段内容介绍了Vue.js和Web Components在前端开发中的优势及二者结合的可能性。Vue.js提供高效简洁的组件化开发,单个组件包含模板、脚本和样式,方便构建复杂用户界面。Web Components作为新兴技术标准,利用自定义元素、Shadow DOM等技术创建封装性强的自定义HTML元素,实现跨框架复用。结合二者,不仅增强了Web Components的逻辑和交互功能,还实现了Vue.js组件在不同框架中的复用,提高了开发效率和可维护性。未来前端开发中,这种结合将大有可为。
194 0
|
2月前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
48 1
|
3月前
|
缓存 前端开发 JavaScript
前端serverless探索之组件单独部署时,利用rxjs实现业务状态与vue-react-angular等框架的响应式状态映射
本文深入探讨了如何将RxJS与Vue、React、Angular三大前端框架进行集成,通过抽象出辅助方法`useRx`和`pushPipe`,实现跨框架的状态管理。具体介绍了各框架的响应式机制,展示了如何将RxJS的Observable对象转化为框架的响应式数据,并通过示例代码演示了使用方法。此外,还讨论了全局状态源与WebComponent的部署优化,以及一些实践中的改进点。这些方法不仅简化了异步编程,还提升了代码的可读性和可维护性。
|
3月前
|
前端开发 JavaScript
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透
350 1
|
3月前
|
前端开发 JavaScript 开发者
Web组件:一种新的前端开发范式
【10月更文挑战第9天】Web组件:一种新的前端开发范式
95 2
|
3月前
|
JavaScript 前端开发 Java
VUE学习四:前端模块化,ES6和ES5如何实现模块化
这篇文章介绍了前端模块化的概念,以及如何在ES6和ES5中实现模块化,包括ES6模块化的基本用法、默认导出与混合导出、重命名export和import,以及ES6之前如何通过函数闭包和CommonJS规范实现模块化。
150 0
VUE学习四:前端模块化,ES6和ES5如何实现模块化
|
3月前
|
前端开发 JavaScript 开发者
深入解析前端开发中的模块化与组件化实践
【10月更文挑战第5天】深入解析前端开发中的模块化与组件化实践
41 1
|
3月前
|
前端开发 JavaScript Go
前端开发趋势:从响应式设计到Web组件的探索
【10月更文挑战第1天】前端开发趋势:从响应式设计到Web组件的探索
47 3
下一篇
开通oss服务