简单谈一谈Vue中render函数

目录
  • 那如何证明?
  • 如何解决?
  • 那我们为什么不采用报错提示中的第二种方式引入完整的vue呢?
  • 补充:vue2 小例子
  • 总结:

首先我们引入的vue并不是一个完整的,而是残缺版的vue(没有模板解析器)

那如何证明?

翻译如下:

大概意思是说功能不全,没有模板解析器。并且提供建议给你:1.使用render函数 2.引入带有模板解析器的vue(完整的vue),那意思就是说vue并没有引入完整?为什么?

我们就需要去依赖的地方看看到底有没有完整引入。由于我们在引入的时候,地址直接写的就是vue,但是vue下还有很多路径

module的意思就是如果使用的es6的模块化引入方式,就使用   dist/vue.runtime.esm.js

import的确是es6的引入方式。这里面就是残缺版的没有模板解析器的vue。

如何解决?

render(createElement){

这个函数有返回值,需要return 并且这个参数createElement是一个函数,该函数可创建具体的节点//

return createElement('span','我是span')

}

那他和正常的默认生成的还是有区别的,我们先看一下常规的render函数

仅仅只是一行render:h=>h(App)

我们可以根据上方代码写成箭头函数并简写形式(仅有一个参数去掉括号,return去掉改为一行)

render:createElement => createElement('span','我是span')        

接下来将参数改成h或者任意字母就和上图相似了

render:h=>h('span','我是span')

于是我们发现这样就显示出来了,如下图↓        ↓        ↓        ↓

那我们为什么不采用报错提示中的第二种方式引入完整的vue呢?

vue是由两部分组成的,

 1:vue核心:包含生命周期,处理事件...

        2.   模板解析器

如果合在一起,模板解析器体积占总体积的1/3,webpack在进行打包时会生成一个大的文件夹,本身模板解析器是不需要打包的,因为webpack已经将.vue文件变成了html,js,css,解析器就不再需要了。

问题来了,为什么我们创建了一个app节点而且不需要加值就可以显示出来内容呢?

为啥template放在组件里就可以被解析呢???这是因为有一个插件所解决的

补充:vue2 小例子

# 父组件
<template>
  <div>
    <self :render="render"></self>
  </div>
</template>
<script>
import self from '@/components/self'
export default {
  components:{
    self
  },
  data() {
    return {
      render:h=>{
        return h(
          'div',
          {class:'red'},
          'nihao'
        )
      }
    }
  },
}
</script>
<style>
  .red {
    color: red;
  }
</style>

# 子组件
<script>
export default {
  name: "SelfText",
  props: {
    render: {
      type: Function,
      default() {
        return {};
      }
    }
  },
  render(h) {
    return this.render(h);
  }
};
</script>

vue3 小例子

# 父组件
<template>
  <div>
    <self :render="render"></self>
  </div>
</template>
<script>
import self from '@/components/self'
export default {
  components:{
    self
  },
  data() {
    return {
      render:h=>{
        return h(
          'div',
          {class:'red'},
          'nihao'
        )
      }
    }
  },
}
</script>
<style>
  .red {
    color: red;
  }
</style>

# 子组件
<script>
import { h } from 'vue'
export default {
  props: {
    render: {
      type: Function,
      default() {
        return {};
      }
    }
  },
  render() {
    return this.render(h);
  }
};
</script>

在vue3中,我们还可以使用setup来返回一个渲染的函数

<script>
import { h } from 'vue'
export default {
  setup() {
    return ()=>h(
      'div',
      {class:'red'},
      'nihaonihao'
    )
  }
}
</script>
<style>
  .red {
    color: red;
  }
</style>

总结:

vue.js和vue.runtime.xxx.js的区别

(1)vue.js是完整版的Vue。包含:核心功能+模板解析器

(2)vue.runtime.xxx.js是运行版的Vue,只包含核心功能

因为vue.runtime.xxx.js没有模板解析器,所以不能使用template配置项,需要使用render函数接收到的createElement函数去指定具体内容

到此这篇关于Vue中render函数的文章就介绍到这了,更多相关Vue中render函数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 了解VUE的render函数的使用

    Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更接近编译器. 在 HTML 层, 我们决定这样定义组件接口:通过传入不同的level 1-6 生成h1-h6标签,和使用slot生成内容 <div id="div1"> <child :level="1">Hello world!</chil

  • 浅谈Vue render函数在ElementUi中的应用

    vue的render函数在日常开发中被广泛应用,今天以ElementUI中的table表头重构为引,实际应用一下借助render函数实现表头搜索,不足之处请多多指教! 首先引入官方demo <el-table :data="tableData" style="width: 100%" :border="true"> <el-table-column prop="date" label="日期&quo

  • Vue中render函数的使用方法

    render函数 vue通过 template 来创建你的 HTML.但是,在特殊情况下,这种写死的模式无法满足需求,必须需要js的编程能力.此时,需要用render来创建HTML. 什么情况下适合使用render函数 在一次封装一套通用按钮组件的工作中,按钮有四个样式(default success error ).首先,你可能会想到如下实现 <div v-if="type === 'success'">success</div> <div v-else

  • vue中render函数的使用详解

    render函数 vue通过 template 来创建你的 HTML.但是,在特殊情况下,这种写死的模式无法满足需求,必须需要js的编程能力.此时,需要用render来创建HTML. render方法的实质就是生成template模板: 通过调用一个方法来生成,而这个方法是通过render方法的参数传递给他的: 通过这三个参数,可以生成一个完整的模板 官网实例 //未使用render函数 Vue.component('anchored-heading', { template: '#anchor

  • 如何理解Vue的render函数的具体用法

    本文介绍了如何理解Vue的render函数的具体用法,分享给大家,具体如下: 第一个参数(必须) - {String | Object | Function} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>render</title> <script src="https://cdn.b

  • 深入理解vue Render函数

    最近在学习vue,正好今日留个笔记,我自己还在摸索学习中,现整理出来以作记录. 会使用基本的Render函数后,就会想,这怎么用 v-for/v-if/v-model;我写个vue Render函数进阶 首先是v-if 的转化使用全局组件的v 值决定组件渲染的状态,对实例中传递的props的"nnum"值得控制可以自如的切换两种状态显示.这样就是和v-if 一样使用组件了 <div id="app"> <mycom :v="nnum&qu

  • VUE render函数使用和详解

    目录 前言 render的作用 render函数讲解 render和template的区别 render举例 总结 前言 在平时编程时,大部分是通过template来创建html.但是在一些特殊的情况下,使用template方式时,就无法很好的满足需求,在这个时候就需要 通过JavaScript 的编程能力来进行操作.此时,就到了render函数展示拳脚去时候了. render的作用 官网示例入口 在官网的这里示例中,使用组件,将相同的内容通过solt放进h1-h6的标签中,在使用传统方式时,代

  • 简单谈一谈Vue中render函数

    目录 那如何证明? 如何解决? 那我们为什么不采用报错提示中的第二种方式引入完整的vue呢? 补充:vue2 小例子 总结: 首先我们引入的vue并不是一个完整的,而是残缺版的vue(没有模板解析器) 那如何证明? 翻译如下: 大概意思是说功能不全,没有模板解析器.并且提供建议给你:1.使用render函数 2.引入带有模板解析器的vue(完整的vue),那意思就是说vue并没有引入完整?为什么? 我们就需要去依赖的地方看看到底有没有完整引入.由于我们在引入的时候,地址直接写的就是vue,但是v

  • 浅谈Vue中render中的h箭头函数

    vue2.0新增了render方法,官方案例写的是: render: h=>h(app) 其中h是由createElement方法演变而来 render: function(createElement){ return createElement(app) } 用es6的写法就是:(只有一个个return语句,可以省略return和{}) render: createElement=>createElement(app) 将createElement改成 h 就是官方写法. 使用 h 的理由,

  • 详解Django中 render() 函数的使用方法

    render() 函数 在讲 render() 函数之前,我们在 Django 项目 index 文件夹的 urls.py 和 views.py 中编写如下功能代码:(不难,望读者细心阅之) # index的 urls.py from django.urls import path form . import views urlpatterns = [ # 定义首页的路由 path(' ', views.index, name='index'), ] # index的views.py from

  • vue 的 Render 函数

    目录 一.节点.树以及虚拟 DOM 二.虚拟 DOM 2.1 深入数据对象 2.2 约束 三.在Render函数中的模板功能 3.1 v-if 和 v-for 3.2 v-model 3.3 事件 & 按键修饰符 3.4 插槽 3.5 例子 一.节点.树以及虚拟 DOM <div> <h1>My title</h1> Some text content <!-- TODO: Add tagline --> </div> 每个元素都是一个节

  • Vue中render方法的使用详解

    先说一下对官网上demo的个人理解: <!DOCTYPE html> <html> <head> <title>Vue的render方法说明</title> <script src="vue.js"></script> </head> <body> <div id="app"> <child :level="1">

  • vue中异步函数async和await的用法说明

    目录 异步函数async和await用法 async/await为什么叫异步 外异内同 异步函数async和await用法 先说一下async的用法,它作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的执行不会阻塞后面代码的执行. 写一个async函数 async function timeout() { return 'hello world'; } 语法很简单,就是在函数前面加上async关键字,来表示它是异步的,那怎么调用呢?

随机推荐