当前位置: 首页 > article >正文

【编码规范】原生开发 与 Vue+组件库开发

原生开发 vs Vue+组件库开发对比

一、原生开发常用方法
  1. DOM操作

    • document.getElementById()
    • document.querySelector()
    • element.addEventListener()
    • classList API操作类名
  2. 事件处理

    • 直接事件绑定
    • 事件委托
    document.body.addEventListener('click', function(e) {if(e.target.matches('.btn')) {// 处理按钮点击}
    });
    
  3. 状态管理

    • 简单变量存储状态
    • 自定义事件通知状态变化
    • 观察者模式实现简单响应式
  4. 组件化实现

    • Web Components
    • 自定义元素+Shadow DOM
    class MyComponent extends HTMLElement {constructor() {super();// 组件实现}
    }
    customElements.define('my-component', MyComponent);
    
  5. AJAX请求

    • XMLHttpRequest
    • fetch API
二、Vue+组件库开发特点
  1. 声明式渲染

    <template><div>{{ message }}</div>
    </template>
    
  2. 组件系统

    • 单文件组件(.vue)
    • Props/Events通信
    • 插槽机制
  3. 状态管理

    • Vuex/Pinia
    • 响应式数据
    const state = reactive({ count: 0 })
    
  4. 内置指令

    • v-if/v-for
    • v-model
    • v-bind
  5. 生命周期

    • created/mounted等钩子
三、核心差异对比
方面原生开发Vue+组件库开发
开发思维命令式编程声明式编程
DOM操作直接操作DOM数据驱动视图
组件化需要手动实现内置完善组件系统
状态管理自行管理响应式系统+状态管理库
代码组织按功能/页面划分按组件划分
开发效率低(需要造轮子)高(开箱即用)
性能优化需要手动优化框架提供优化机制
维护成本高(随着规模增长)低(结构清晰)
学习曲线平缓(基础API)较陡(概念较多)
四、典型场景代码对比

场景:实现一个计数器

  1. 原生实现:
<button id="counter">0</button><script>const btn = document.getElementById('counter');let count = 0;btn.addEventListener('click', () => {count++;btn.textContent = count;});
</script>
  1. Vue实现:
<template><button @click="count++">{{ count }}</button>
</template><script>
export default {data() {return { count: 0 }}
}
</script>
五、选择建议

适合原生开发的场景

  • 小型项目或简单页面
  • 需要极致性能控制
  • 无复杂交互需求
  • 需要最小化依赖

适合Vue开发的场景

  • 中大型复杂应用
  • 需要快速开发迭代
  • 团队协作项目
  • 需要长期维护
六、现代原生开发增强

即使使用原生开发,也可以采用现代工具提升效率:

  1. 使用ES Modules组织代码
  2. 采用Web Components标准
  3. 使用轻量级库(如petite-vue)
  4. 搭配Vite等现代构建工具

示例:现代原生模块化

// counter.js
export class Counter {constructor(el) {this.el = el;this.count = 0;this.init();}init() {this.el.addEventListener('click', () => this.increment());this.update();}increment() {this.count++;this.update();}update() {this.el.textContent = this.count;}
}// main.js
import { Counter } from './counter.js';
new Counter(document.getElementById('counter'));

相关文章:

【编码规范】原生开发 与 Vue+组件库开发

原生开发 vs Vue组件库开发对比 一、原生开发常用方法 DOM操作&#xff1a; document.getElementById()document.querySelector()element.addEventListener()classList API操作类名 事件处理&#xff1a; 直接事件绑定事件委托 document.body.addEventListener(click, functi…...

[Godot] C#2D平台游戏基础移动和进阶跳跃代码

本文章给大家分享一下如何实现基本的移动和进阶的跳跃&#xff08;跳跃缓冲、可变跳跃、土狼时间&#xff09;以及相对应的重力代码&#xff0c;大家可以根据自己的需要自行修改 实现效果 场景搭建 因为Godot不像Unity&#xff0c;一个节点只能绑定一个脚本&#xff0c;所以我…...

【Unity笔记】Unity + OpenXR项目无法启动SteamVR的排查与解决全指南

图片为AI生成 一、前言 随着Unity在XR领域全面转向OpenXR标准&#xff0c;越来越多的开发者选择使用OpenXR来构建跨平台的VR应用。但在项目实际部署中发现&#xff1a;打包成的EXE程序无法正常启动SteamVR&#xff0c;或者SteamVR未能识别到该应用。本文将以“Unity OpenXR …...

使用 rebase 轻松管理主干分支

前言 最近遇到一个技术团队的 dev 环境分支错乱&#xff0c;因为是多人合作大家各自提交信息&#xff0c;导致出现很多交叉合并记录&#xff0c;让对应 log 看起来非常混乱&#xff0c;难以阅读。 举例说明 假设我们有一个项目&#xff0c;最初develop分支有 3 个提交记录&a…...

【愚公系列】《Python网络爬虫从入门到精通》063-项目实战电商数据侦探(主窗体的数据展示)

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…...

HttpSessionListener 的用法笔记250417

HttpSessionListener 的用法笔记250417 以下是关于 HttpSessionListener 的用法详解&#xff0c;涵盖核心方法、实现步骤、典型应用场景及注意事项&#xff0c;帮助您全面掌握会话&#xff08;Session&#xff09;生命周期的监听与管理&#xff1a; 1. 核心功能 HttpSessionLi…...

火山RTC 5 转推CDN 布局合成规则

实时音视频房间&#xff0c;转推CDN&#xff0c;文档&#xff1a; 转推直播--实时音视频-火山引擎 一、转推CDN 0、前提 * 在调用该接口前&#xff0c;你需要在[控制台](https://console.volcengine.com/rtc/workplaceRTC)开启转推直播功能。<br> * 调…...

Spark两种运行模式与部署

1. Spark 的运行模式 部署Spark集群就两种方式&#xff0c;单机模式与集群模式 单机模式就是为了方便开发者调试框架的运行环境。但是生产环境中&#xff0c;一般都是集群部署。 现在Spark目前支持的部署模式&#xff1a; &#xff08;1&#xff09;Local模式&#xff1a;在本地…...

react 父子组件通信 子 直接到父, 父 forwardref子

React核心概念&#xff1a;单向数据流&#xff08;Unidirectional Data Flow&#xff09; React 中数据的流动像瀑布一样&#xff0c;只能从上层组件&#xff08;父组件&#xff09;流向下层组件&#xff08;子组件&#xff09;。 子组件无法直接反向修改父组件的数据&#x…...

qt画一朵花

希望大家的生活都更加美好&#xff0c;画一朵花送给大家 效果图 void FloatingArrowPubshButton::paintEvent(QPaintEvent *event) {QPainter painter(this);painter.setRenderHints(QPainter::Antialiasing);QPen pen;pen.setColor("green");pen.setWidth(5);QBrush…...

服务器上安装maven

1.安装 下载安装包 https://maven.apache.org/download.cgi 解压安装包 cd /opt/software tar -xzvf apache-maven-3.9.9-bin.tar.gz 安装目录(/opt/maven/) mv /opt/software/apache-maven-3.9.9 /opt/ 3.权限设置 把/opt/software/apache-maven-3.9.9 文件夹重命名为ma…...

UOS+N 卡 + CUDA 环境下 X86 架构 DeepSeek 基于 vLLM 部署与 Dify 平台搭建指南

一、文档说明 本文档是一份关于 DeepSeek 在X86架构下通vLLM工具部署的操作指南&#xff0c;主要面向需要在UOSN卡CUDA环境中部署DeepSeek的技术人员&#xff0c;旨在指导文档使用者完成从 Python 环境升级、vLLM 库安装、模型部署到 Dify 平台搭建的全流程操作。 二、安装Pyt…...

MySQL终章(8)JDBC

目录 1.前言 2.正文 2.1JDBC概念 2.2三种编码方式 2.2.1第一种 2.2.2第二种&#xff08;优化版&#xff09; 2.2.3第三种&#xff08;更优化版&#xff09; 3.小结 1.前言 哈喽大家好吖&#xff0c;今天来给大家带来Java中的JDBC的讲解&#xff0c;之前学习的都是操作…...

点云数据处理开源C++方案

一、主流开源库对比 库名称特点适用场景开源协议活跃度PCL功能最全&#xff0c;算法丰富科研、工业级应用BSD★★★★★Open3D现代API&#xff0c;支持Python绑定快速开发、深度学习MIT★★★★☆CGAL计算几何算法强大网格处理、高级几何运算GPL/LGPL★★★☆☆PDAL专注于点云…...

Python 爬虫如何伪装 Referer?从随机生成到动态匹配

一、Referer 的作用与重要性 Referer 是 HTTP 请求头中的一个字段&#xff0c;用于标识请求的来源页面。它在网站的正常运行中扮演着重要角色&#xff0c;例如用于统计流量来源、防止恶意链接等。然而&#xff0c;对于爬虫来说&#xff0c;Referer 也可能成为被识别为爬虫的关…...

【MySQL】表的约束(主键、唯一键、外键等约束类型详解)、表的设计

目录 1.数据库约束 1.1 约束类型 1.2 null约束 — not null 1.3 unique — 唯一约束 1.4 default — 设置默认值 1.5 primary key — 主键约束 自增主键 自增主键的局限性&#xff1a;经典面试问题&#xff08;进阶问题&#xff09; 1.6 foreign key — 外键约束 1.7…...

基于STC89C52RC和8X8点阵屏、独立按键的小游戏《打砖块》

目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、8X8点阵屏2、独立按键3、定时器04、定时器1 四、主函数总结 系列文章目录 前言 用的是普中A2开发板&#xff0c;外设有&#xff1a;8X8LED点阵屏、独立按键。 【单片机】STC89C52RC 【频率】12T11.0592MHz 效…...

数字电子技术基础(五十)——硬件描述语言简介

目录 1 硬件描述语言简介 1.1 硬件描述语言简介 1.2 硬件编程语言的发展历史 1.3 两种硬件描述的比较 1.4 硬件描述语言的应用场景 1.5 基本程序结构 1.5.1 基本程序结构 1.5.2 基本语句和描述方法 1.5.3 仿真 1 硬件描述语言简介 1.1 硬件描述语言简介 硬件描述语…...

【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读

【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读 文章目录 【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件common.py解读前言autopad函数Conv类__init__成员函数forward成员函数forward_fuse成员函数 Bottleneck类__init__成员…...

16.Chromium指纹浏览器开发教程之WebGPU指纹定制

WebGPU指纹概述 WebGPU是下一代的Web图形和计算API&#xff0c;旨在提供高性能的图形渲染和计算能力。它是WebGL的后继者&#xff0c;旨在利用现代GPU的强大功能&#xff0c;使得Web应用能够实现接近原生应用的图形和计算性能。而且它是一个低级别的API&#xff0c;可以直接与…...

示例:spring 纯xml配置

以下是一个完整的 纯 XML 配置开发示例&#xff0c;涵盖 DAO、Service、Controller 层&#xff0c;通过 Spring XML 配置实现依赖注入和事务管理&#xff0c;无需任何注解。 1. 项目结构 src/main/java ├── com.example.dao │ └── UserDao.java # DAO 接口…...

SQL预编译——预编译真的能完美防御SQL注入吗

SQL注入原理 sql注入是指攻击者拼接恶意SQL语句到接受外部参数的动态SQL查询中&#xff0c;程序本身 未对插入的SQL语句进行过滤&#xff0c;导致SQL语句直接被服务端执行。 拼接的SQL查询例如&#xff0c;通过在id变量后插入or 11这样的条件&#xff0c;来绕过身份验证&#…...

系统架构师2025年论文《论基于UML的需求分析》

论基于构件的软件开发 摘要: 2011 年 3 月,我有幸参加了某市医院预约挂号系统项目的开发工作,并担任系统架构师一职,负责系统的架构设计及核心构件的开发工作。该项目是某市医院为提升患者就医体验、优化挂号流程而委托开发的,项目于 2011 年底验收,满足了医院及患者提…...

运行neo4j.bat console 报错无法识别为脚本,PowerShell 教程:查看语言模式并通过注册表修改受限模式

无法将“D:\neo4j-community-4.4.38-windows\bin\Neo4j-Management\Get-Args.ps1”项识别为cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 前提配置好环境变量之后依然报上面的错…...

【EDA软件】【设计约束和分析操作方法】

1. 设计约束 设计约束主要分为物理约束和时序约束。 物理约束主要包括I/O接口约束&#xff08;如引脚分配、电平标准设定等物理属性的约束&#xff09;、布局约束、布线约束以及配置约束。 时序约束是FPGA内部的各种逻辑或走线的延时&#xff0c;反应系统的频率和速度的约束…...

【Lua】Lua 入门知识点总结

Lua 入门学习笔记 本教程旨在帮助有编程基础的学习者快速入门Lua编程语言。包括Lua中变量的声明与使用&#xff0c;包括全局变量和局部变量的区别&#xff0c;以及nil类型的概念、数值型、字符串和函数的基本操作&#xff0c;包括16进制表示、科学计数法、字符串连接、函数声明…...

Godot学习-关于3D模型选择问题

下面是OBJ、glTF/GLB、BLEND和FBX四种3D模型格式的比较表格&#xff0c;以便更直观地了解它们之间的差异&#xff1a; 特性/格式OBJglTF / GLBBLENDFBX文件类型文本文本/二进制二进制二进制几何数据支持支持支持支持材质支持基础高级&#xff08;PBR等&#xff09;完整支持高级…...

光谱相机在肤质检测中的应用

光谱相机在肤质检测中具有独特优势&#xff0c;能够通过多波段光谱分析皮肤深层成分及生理状态&#xff0c;实现‌非侵入式、高精度、多维度的皮肤健康评估‌。以下是其核心应用与技术细节&#xff1a; ‌一、工作原理‌ ‌光谱反射与吸收特性‌&#xff1a; ‌血红蛋白‌&a…...

IDEA 插件推荐清单(2025)

IDEA 插件推荐清单 精选高效开发必备插件&#xff0c;提升 Java 开发体验与效率。 参考来源&#xff1a;十六款好用的 IDEA 插件&#xff0c;强烈推荐&#xff01;&#xff01;&#xff01;不容错过 代码开发助手类 插件名称功能简介推荐指数CodeGeeX智能代码补全、代码生成、…...

机器学习第一篇 线性回归

数据集&#xff1a;公开的World Happiness Report | Kaggle中的happiness dataset2017. 目标&#xff1a;基于GDP值预测幸福指数。&#xff08;单特征预测&#xff09; 代码&#xff1a; 文件一&#xff1a;prepare_for_traning.py """用于科学计算的一个库…...