「后端小伙伴来学前端了」Vue脚手架中 render 函数

简介: 「后端小伙伴来学前端了」Vue脚手架中 render 函数

微信截图_20220525210339.png


前言


上一篇文章写了:「后端小伙伴来学前端了」分析Vue脚手架结构


简单说明了Vue的脚手架结构,但是上篇文章还欠了个小点没有说完,就在这篇文章中补齐。就是所谓的render函数。


一、main.js中引入的原来是残缺版vue.js


我们来接着看看main.js这个入口文件。


// 引入vue
import Vue from 'vue'
// 引入app组件
import App from './App.vue'
// 关闭生产提示
Vue.config.productionTip = false
// 创建 Vue 实例对象 Vm
new Vue({
  render: h => h(App) // 这里不是一下就能说完的,这里简单说下:
  // App 组件渲染,这里的 h 即是 vm.$createElement ,便是在vm.render这个阶段
  // 最粗略的理解,执行完这里,就是将app 放入了 容器中去了。
}).$mount('#app')
// Vue 的$mount()为手动挂载  这个也不是一下能说清,我也学艺不精,以后再补上 哈哈


这个代码,我想咱们只要创建过vue项目,大家肯定都写过了哈。


但是不知道大家有没有纠结过或者思考过new Vue() 中的 render:h=>h(App)是干什么。


(我是纯属刚学,好奇宝宝😂)


按照我们最开始的学习:


下面这种写法也是可行的吧,组件我们引入了,也注册了。


import Vue from 'vue'
import App from './App.vue'
Vue.config.productionTip = false
new Vue({
  template:'<App></App>'  
  components:{App}
}).$mount('#app')


看页面:


QQ截图20220525210458.png


页面上是空白的,然后有以下报错信息:


//报错
vue.runtime.esm.js?2b0e:619 [Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available.
//提示的解决方式
Either pre-compile the templates into render functions,
   or use the compiler-included build.
(found in <Root>)


这里的报错意思:您正在使用仅运行时版本的Vue


解决方式提示有两种:


可以将模板预编译为呈现函数, 就是我们之前写的 render 函数
也可以使用编译器附带的构建。(换成人话就是使用完整版的vue,包含模板编译器版本的vue)


注意:我们在 main.js 中所引用的import Vue from 'vue',其实是一个运行时版本的vue,并非是完整的。


证明方式:


我们按照ctrl,用鼠标点击我们引入的vue,再点到vue的文件夹下的dist文件下的vue


QQ截图20220525210600.png


在这源码上加上一句话,看看会不会运行。


微信截图_20220525210634.png


虽然还是报错的,但是我们打印的那句话是已经出来了。(虽然有那么多vue...js,但是咋知道是这个呢?测出来的,亲测)


微信截图_20220525210718.png


报错提示中,告诉我们说,如果引入完整版vue也能解决问题,那么我们就引用完整路径,来测试一下,看可以吗?


微信截图_20220525210802.png


当我引入完整版的vue之后,我项目中的内容就已经展示出来了,控制台也不再报错。


到这个时候,大家也会想,我们既然可以通过引入完整的 vue.js 来进行模板的解析,为什么还要写那个 render函数呢?


原因大致如下:


这个模板引擎只是在我们生产的时候能够用到,当我们用 webpack 进行打包的时候,就用不上这个vue这个自带的模板引擎了, webpack已经帮我们把vue文件解析成了浏览器认识的.js、.css、.html文件了,那么vue的引擎也没必要继续存在那啦丫。(你可以把它当做个工具人,用就要,不用就扔掉哈哈)


但是如果我们一定残缺版的vue呢?这个render函数在这里是做什么呢?


二、render函数


我们先看看效果哈,当我们改成残缺版vue.js,写上render函数,是成功可以运行的


QQ截图20220525210840.png


接下来我们一步一步把这个函数解析出来哈:


我们先拆成个普通函数,看看它是什么样的哈


render (h) {
    console.log(h)
    return null
}


我把拆开,输出来是下面这样的:


微信截图_20220525210911.png


这个传进来的参数原来就是个 函数。它的返回值也是函数createElement()

首先说明一下我的demo项目的结构,然后你再思考思考


QQ截图20220525210939.png


我是有一个App组件和四个组件小组件,并且在App中进行了引入,而这上面也正好有四个参数,


createElement()中正好是一个vm,后面跟着这四个参数。


我们简单想一下就是一个App带着四个小弟哈哈.


所以换而言之,如果我们写成普通函数,就是如下状态


render (h) {
    console.log(h)
    return h(App)
}


因为我们的组件全部都在 App 内,所以我们实际只需要渲染 app 即可啦。


但是这里的其实不叫h,它真正的术语叫createElment


render (createElment) {
    return createElment(App)
}


然后再简化成箭头函数就成了脚手架中的 render: h => h(App)


这里 render 其实就是App组件渲染,脚手架方便确实方便了很多,但是真的封装了很多我们看不到的东西.


虽然有手就能用,但是就因为简单,我想我们对于它的理解,在很长很长的一段时间内都会处于表面上吧.


后语


大家一起加油!!!如若文章中有不足之处,请大家及时指出,在此郑重感谢。


纸上得来终觉浅,绝知此事要躬行。

大家好,我是博主宁在春主页

一名喜欢文艺却踏上编程这条道路的小青年。

希望:我们,待别日相见时,都已有所成


目录
相关文章
|
7月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
657 1
|
8月前
|
移动开发 前端开发 JavaScript
Vue与React两大前端框架的主要差异点
以上就是Vue和React的主要差异点,希望对你有所帮助。在选择使用哪一个框架时,需要根据项目的具体需求和团队的技术栈来决定。
484 83
|
9月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
493 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
7月前
|
JavaScript 前端开发 编译器
Vue与TypeScript:如何实现更强大的前端开发
Vue.js 以其简洁的语法和灵活的架构在前端开发中广受欢迎,而 TypeScript 作为一种静态类型语言,为 JavaScript 提供了强大的类型系统和编译时检查。将 Vue.js 与 TypeScript 结合使用,不仅可以提升代码的可维护性和可扩展性,还能减少运行时错误,提高开发效率。本文将介绍如何在 Vue.js 项目中使用 TypeScript,并通过一些代码示例展示其强大功能。
297 22
|
10月前
|
SQL JavaScript 安全
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
436 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
|
9月前
|
人工智能 JavaScript 前端开发
Vue 性能革命:揭秘前端优化的终极技巧;Vue优化技巧,解决Vue项目卡顿问题
Vue在处理少量数据和有限dom的情况下技术已经非常成熟了,但现在随着AI时代的到来,海量数据场景会越来越多,Vue优化技巧也是必备技能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JavaScript 前端开发 搜索推荐
Vue的数据驱动视图与其他前端框架的数据驱动方式有何不同?
总的来说,Vue 的数据驱动视图在诸多方面展现出独特的优势,其与其他前端框架的数据驱动方式的不同之处主要体现在绑定方式、性能表现、触发机制、组件化结合、灵活性、语法表达以及与后端数据交互等方面。这些差异使得 Vue 在前端开发领域具有独特的地位和价值。
264 58
|
11月前
|
JavaScript 前端开发 jenkins
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
本文探讨了在不依赖Node和VSCode的情况下,仅使用记事本和浏览器开发一个完整的Vue3前端项目的方法。通过CDN引入Vue、Vue Router、Element-UI等库,直接编写HTML文件实现页面功能,展示了前端开发的本质是生成HTML。虽然日常开发离不开现代工具,但掌握这种基础方法有助于快速实现想法或应对特殊环境限制。文章还介绍了如何用Node简单部署HTML文件到服务器,提供了一种高效、轻量的开发思路。
262 10
|
存储 JavaScript 前端开发
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
【10月更文挑战第21天】 vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
|
前端开发 JavaScript 开发者
React与Vue:前端框架的巅峰对决与选择策略
【10月更文挑战第23天】React与Vue:前端框架的巅峰对决与选择策略

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改