简单谈一谈Vue中render函数

 更新时间:2022年09月06日 14:49:32   作者:那只猫喝咖啡  
vue中的render函数,它返回的是一个虚拟节点vnode,也就是我们要渲染的节点,下面这篇文章主要给大家介绍了关于Vue中render函数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

首先我们引入的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函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Vue实现文件上传的几种实现方式

    基于Vue实现文件上传的几种实现方式

    文件上传是web开发中一个常见的需求,Vue.js作为一款流行的前端框架,也提供了方便的方法来实现文件上传功能,下面这篇文章主要给大家介绍了关于基于Vue实现文件上传的几种实现方式,需要的朋友可以参考下
    2024-03-03
  • vue实现自定义多选与单选的答题功能

    vue实现自定义多选与单选的答题功能

    这篇文章主要介绍了使用vue实现自定义多选与单选的答题功能,vue组件中在表单方面提供了一个v-model指令,非常好用,具体实现过程大家跟随脚本之家小编一起看看吧
    2018-07-07
  • vue.js 1.x与2.0中js实时监听input值的变化

    vue.js 1.x与2.0中js实时监听input值的变化

    这篇文章主要介绍了vue.js 1.x与vue.js2.0中js实时监听input值的变化的相关资料,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • 实例讲解Vue.js中router传参

    实例讲解Vue.js中router传参

    本篇文章通过实例给大家分析了Vue.js中router传参的相关知识点,对此有兴趣的朋友参考学习下。
    2018-04-04
  • vue video和vue-video-player实现视频铺满教程

    vue video和vue-video-player实现视频铺满教程

    这篇文章主要介绍了vue video和vue-video-player实现视频铺满教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 三步搞定:Vue.js调用Android原生操作

    三步搞定:Vue.js调用Android原生操作

    这篇文章主要介绍了三步搞定:Vue.js调用Android原生操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 解决vue页面刷新产生白屏的问题

    解决vue页面刷新产生白屏的问题

    这篇文章主要介绍了解决vue页面刷新产生白屏的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • vue中table实现真正的跨越全选

    vue中table实现真正的跨越全选

    本文主要介绍了vue中table实现真正的跨越全选,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • vue3.0+vue-router+element-plus初实践

    vue3.0+vue-router+element-plus初实践

    这篇文章主要介绍了vue3.0+vue-router+element-plus初实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • vue3使用element-plus中el-table组件报错关键字'emitsOptions'与'insertBefore'分析

    vue3使用element-plus中el-table组件报错关键字'emitsOptions'与&

    这篇文章主要给大家介绍了关于vue3使用element-plus中el-table组件报错关键字'emitsOptions'与'insertBefore'的相关资料,文中将解决方法介绍的非常详细,需要的朋友可以参考下
    2022-10-10

最新评论