vue将组件中template转为js
在 Vue 中,组件的 template 需要被转换为 JavaScript 渲染函数(Render Function)才能在浏览器中运行。Vue 2 和 Vue 3 的转换机制有所不同,主要体现在编译时机、编译工具和输出结果上。
1. Vue 2 的 Template 转换
转换方式
Vue 2 使用 vue-template-compiler 在构建时(通常是 Webpack 的 vue-loader)将 .vue 文件中的 <template> 编译为渲染函数。
步骤
-
开发阶段:
-
通过
vue-loader处理.vue文件,提取<template>部分。 -
使用
vue-template-compiler将模板编译为render()函数。 -
最终生成的代码类似:
-
render(h) {return h('div', { attrs: { id: 'app' } }, 'Hello World');
}
2.运行时:
- 如果未预编译(如直接使用
template: '<div>Hello</div>'选项),Vue 2 会在浏览器中动态编译(需要包含完整版 Vue,体积较大)。
关键点
-
依赖:
vue-template-compiler(必须与 Vue 2 版本严格匹配)。 -
输出:渲染函数使用
h(即createElement)生成虚拟 DOM。 -
动态编译:完整版 Vue(含编译器)支持运行时编译,但推荐预编译以优化性能。
2. Vue 3 的 Template 转换
转换方式
Vue 3 使用 @vue/compiler-sfc(单文件组件编译器)和 @vue/compiler-dom(模板编译器),编译过程更高效且支持更多优化。
步骤
-
开发阶段:
-
@vue/compiler-sfc解析.vue文件,分离<template>、<script>、<style>。 -
@vue/compiler-dom将模板编译为 优化后的渲染函数。 -
生成的代码使用
import { createVNode } from 'vue',例如:
-
import { createVNode as _createVNode } from 'vue';
export function render(_ctx, _cache) {return _createVNode('div', { id: 'app' }, 'Hello World');
}
2.运行时:
- Vue 3 不再支持浏览器内的动态模板编译(即使使用完整版),所有模板必须预编译。
- 渲染函数直接使用
createVNode(替代 Vue 2 的h)。
关键点
-
依赖:
@vue/compiler-sfc(Vite 或 Vue CLI 内部集成,无需手动配置)。 -
输出:渲染函数更高效,支持静态节点提升(Static Hoisting)、补丁标志(Patch Flags)等优化。
-
体积更小:由于移除了运行时编译器,生产包更精简。
3. Vue 2 和 Vue 3 的主要区别
| 特性 | Vue 2 | Vue 3 |
|---|---|---|
| 编译器工具 | vue-template-compiler | @vue/compiler-sfc |
| 运行时编译 | 支持(需完整版 Vue) | 不再支持(必须预编译) |
| 渲染函数生成 | h(createElement) | createVNode |
| 优化策略 | 基础虚拟 DOM 优化 | 静态提升、补丁标志等高级优化 |
| 体积影响 | 完整版含编译器,体积较大 | 更精简(无运行时编译器) |
总结
-
Vue 2:
-
依赖
vue-template-compiler,支持运行时编译(但推荐预编译)。 -
渲染函数使用
h,优化较少。
-
-
Vue 3:
-
依赖
@vue/compiler-sfc,强制预编译,渲染函数使用createVNode。 -
编译时优化更多,性能更好,包体积更小。
-
最佳实践:无论 Vue 2 还是 Vue 3,都应通过构建工具(Webpack/Vite)预编译模板,避免运行时开销。
相关文章:
vue将组件中template转为js
在 Vue 中,组件的 template 需要被转换为 JavaScript 渲染函数(Render Function)才能在浏览器中运行。Vue 2 和 Vue 3 的转换机制有所不同,主要体现在编译时机、编译工具和输出结果上。 1. Vue 2 的 Template 转换 转换方式 Vue…...
Centos 8 安装教程(新手版)
1.需要在阿里开源镜像站下载对应的镜像,如下:https://mirrors.aliyun.com/centos/8.5.2111/isos/x86_64/ 2.打开VM虚拟机,创建新的虚拟机,选择自定义 如图所示点击进行: 选择下载好的镜像 选择“Linux”,版…...
Vue2函数式组件实战:手写可调用的动态组件,适用于toast轻提示、tip提示、dialog弹窗等
Vue2函数式组件实战:手写可调用的动态组件 一、需求场景分析 在开发中常遇到需要动态调用的组件场景: 全局弹窗提示即时消息通知动态表单验证需要脱离当前DOM树的悬浮组件 传统组件调用方式的痛点:必须预先写入模板,可能还要用…...
ESLint语法报错
ESLint语法报错 运行报错 You may use special comments to disable some warnings. Use // eslint-disable-next-line to ignore the next line. Use /* eslint-disable */ to ignore all warnings in a file.解决方案 关闭eslint的语法检测,在eslintrc.js文件中…...
大象如何学会太空漫步?美的:科技领先、To B和全球化
中国企业正处在转型的十字路口。一边是全新的技术、全新的市场机遇;一边是转型要面临的沉重负累和巨大投入,无数中国制造、中国品牌仍在寻路,而有的人已经走至半途。 近日,美的集团交出了一份十分亮眼的2024年财报。数据显示&…...
Leetcode 3500. Minimum Cost to Divide Array Into Subarrays
Leetcode 3500. Minimum Cost to Divide Array Into Subarrays 1. 解题思路2. 代码实现 题目链接:3500. Minimum Cost to Divide Array Into Subarrays 1. 解题思路 这一题非常惭愧,没有自己搞定,基本是抄的大佬们的代码,甚至抄…...
已经使用中的clickhouse更改数据目录
在更换的目录操作,这里更换的目录为home目录,原先安装的目录在/soft/clickhouse/ ,在该目录下有data目录和log目录 更改前目录 更改后目录 1、停止clickhouse服务 sudo systemctl stop clickhouse-server 2、在home目录创建clickhouse目录,在clickho…...
PHP的相关配置和优化
进入etc下面 去掉注释 pid run/php-fpm.pid #指定pid文件存放位置 生成一下子配置文件 这些都是生成的fastcgi的配置文件 进入php中,然后复制模版,生成配置文件 然后编辑文件更改时区 改完之后可以生成启动脚本 这时候刷新之后,再启动会报…...
体重秤PCBA电路方案组成结构
体重秤PCBA电路主要由以下几个部分组成: 主控芯片电路 芯片选择:通常采用低功耗、高性能的单片机作为主控芯片,如前面提到的SIC8833等。这类芯片具备丰富的外设接口,可方便地与其他模块进行通信和控制。 电路连接:主控…...
android 加载本地.svg资源的几种引入方式
在 Android 中,可以在 XML 布局文件中引入本地 .svg 资源,但需要先转换为 Android 可识别的格式。主要有以下几种方式: 方式 1:使用 Vector Asset(官方推荐) Android 不支持直接加载 .svg,但可…...
fio磁盘测试工具使用笔记
本文介绍磁盘性能测试工具fio在某国产操作系统(内核4.19,gcc为7.3.0)上的编译和使用。 背景 某项目使用物理机安装某数据库,相关人员提到磁盘性能方面的要求,用fio测试32k的随机读写,性能要达到1万 IOPS。…...
JavaScrip——BOM编程
一、BOM核心对象与导航控制 1. location对象:页面跳转与刷新 // 跳转到指定URL location.href "https://example.com"; // 刷新当前页面 location.reload(); // 示例:点击按钮跳转 document.querySelector("#btn").onclick () &…...
机器学习 分类算法
【实验名称】 实验:分类算法 【实验目的】 1.了解分类算法理论基础 2.平台实现算法 3. 编程实现分类算法 【实验原理】 分类(Categorization or Classification)就是按照某种标准给对象贴标签(label),再根据标签来区分归类。 【实验环境】 OS:Ubuntu16.0…...
【leetcode100】每日温度
1、题目描述 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输…...
<贪心算法>
前言:在主包还没有接触算法的时候,就常听人提起“贪心”,当时是layman,根本不知道说的是什么,以为很难呢,但去了解一下,发现也不过如此嘛(bushi),还以为是什么高级东西呢…...
基于银河麒麟桌面服务器操作系统的 DeepSeek本地化部署方法【详细自用版】
一、3种方式使用DeepSeek 1.本地部署 服务器操作系统环境进行,具体流程如下(桌面环境步骤相同): 本例所使用银河麒麟高级服务器操作系统版本信息: (1)安装ollama 方式一:按照ollama官网的下载指南,执行如下命令: curl -fsSL https://ollama.com/install.sh | sh方…...
「2025最新版React+Ant Design+Router+TailwindCss全栈攻略:从零到实战,打造高颜值企业级应用
一站式掌握最新技术栈!手把手教你配置路由、集成UI组件库、高效开发秘籍大公开 ReactAntrouteraxiosmocktailwind css等组合安装使用教程 官网:React Native 中文网 使用React来编写原生应用的框架 一,安装 npx create-react-app my-app …...
Ubuntu 24.04.2 LTS 系统安装python,创建虚拟环境
在 Ubuntu 24.04.2 LTS 系统中,系统本身自带了 Python 3,不过你还是可以按照下面的步骤来安装和配置 Python 环境。 1. 检查系统自带的 Python 版本 在终端中输入以下命令查看系统自带的 Python 版本: python3 --version如果显示了 Python…...
redis7.0搭建redis-cluster集群部署实战
环境 基于3台centos服务 host节点1端口节点2端口master70007001slave170007001slave270007001 安装redis,以及环境准备 安装可以参考https://blog.csdn.net/tao1992/article/details/132614567 安装路径设置了/usr/local/redis 分别在3台服务器上执行 #配置文…...
CMake学习--如何在CMake中编译静态库、动态库并在主程序中调用
目录 一、背景知识二、使用方法(一)编译静态库(二)编译动态库(三)在主程序中调用库 三、总结 一、背景知识 在C/C开发中,库(Library)是预先编译好的代码集合,…...
安美数字酒店宽带运营系统存在SQL注入漏洞
免责声明:本号提供的网络安全信息仅供参考,不构成专业建议。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我联系,我将尽快处理并删除相关内容。 漏洞描述 安美数字酒店宽带运营系统的lang…...
中级:Git面试题全攻略
一、引言 在现代软件开发中,Git作为分布式版本控制系统,被广泛应用于代码管理与团队协作。面试官通过Git相关问题,考察候选人对版本控制的基本概念、操作流程以及解决实际问题的能力。本文将深入解读Git的基本操作、分支管理、冲突解决等常见…...
ubuntu18 server版花屏问题
新搞了一台dellT150的塔式服务器,装的ubuntu18 server版。 开机后遇到花屏,或者卡在开机界面的问题,和售后技术沟通这个情况是ubuntu自带的显卡驱动包兼容问题。需要做如下设置: 解决: 1.开机,连续按下e…...
基于神经网络的肾脏疾病预测模型
构建一个基于神经网络的肾脏疾病预测模型 1. 数据预处理 加载数据:读取 kidney_disease.csv 文件,加载患者医疗数据。删除冗余特征:移除与预测目标无关的列(如 al, su 等),保留关键特征(如…...
Oracle常用高可用方案(10)——RAC
10.2. RAC 10.2.1. 概念 RAC,Real Application Cluster的缩写,业界就称为RAC。RAC最早出现于2001年发布的Oracle 9i版本,之前的版本中,也有类似的产品或技术,叫做OPS,即Oracle Parallel Server的缩写。基于多方面的因素,Oracle 9i之前的类似产品或技术并没有得到广泛应…...
JavaScript基础-移动端常用开发插件
在移动Web开发中,为了提升开发效率和用户体验,开发者通常会依赖于一些成熟的JavaScript插件。这些插件封装了复杂的功能,使得实现常见的交互效果变得更加简单快捷。本文将介绍几款广泛使用的移动端开发插件,并通过具体的示例展示它…...
I/O多路复用 + Reactor和Proactor + 一致性哈希
网络系统 1. I/O多路复用1)原始Socket模型通信方式2)多进程模型3)多线程模型4)I/O多路复用select/pollepoll边缘触发和水平触发 2. Reactor和Proactor1)Reactor模式2)Reactor模式四种方案3)单Re…...
解决小程序video控件在真机和上线后黑屏不播放问题
小程序上线后,mp4格式的视频无法点击是黑屏,但是测试得时候在微信开发者工具中能够打开正常播放 原因:编码格式不能是vp9 微信开发者工具本地设置中把这个打开勾选。 排查:可以换一个视频尝试能不能真机播放,如果能&a…...
js中判断对象是否包含某个属性(元素)
在JavaScript中,判断对象是否包含某个属性(元素)主要有以下几种方法,根据具体需求选择合适的方式: 1. 使用 in 运算符 作用:检查对象自身及原型链上是否存在指定属性。 示例: javascript cons…...
数据库6(数据库指令)
之前所学的指令均为查找指令,即select相关语句 接下来的语句是增删改查的其他三部分,即增删改 1.删除 删除操作是三个操作中较为简单的,因为它只需要考虑数据的完整性 在实验时可以用表的复件来操作,防止操作不当导致数据库被…...
