Vue.js render方法使用详解
前注: 版本限制: Vue.js 2.0+ 1.0无法使用 没耐心,只关心有什么用的,想知道其大概是获取什么东西后生成的,可以直接看结尾的总结 非使用render方法的情况完整代码: <script type="text/javascript"> 代码说明:
这样的代码有一个缺陷,就是需要写大量重复的代码,如从 ~ 使用render方法的情况解决办法就是render方法,全部代码如下: 代码说明: 1、这里的代码和上面区别之处有两点: 其一,没有显式的模板内容,而是通过render方法生成; 其二,使用了createElement方法 2、关于createElement方法,他是通过render函数的参数传递进来的,这个方法有三个参数, 第一个参数主要用于提供dom的html内容,类型可以是字符串、对象或函数。比如”div”就是创建一个 标签
第二个参数(类型是对象)主要用于设置这个dom的一些样式、属性、传的组件的参数、绑定事件之类,具体可以参考 官方文档 里这一小节的说明 第三个参数(类型是数组,数组元素类型是VNode)主要用于说是该结点下有其他结点的话,就放在这里。 比如说,有需要分发的标签 个人初步理解是,在原本被替换的地方,例如例上面代码中的 Hello world!
这个数组中则有两个元素,分别是 Hello 和 world! ,例如 this.$slots.default[0] 则表示第一个标签。
另外,假如这2个元素中间有空格、换行符之类,那么数组中则有三个元素,那个空格、换行符则为第二个元素。这个属性有点类似dom的 childNodes属性,不是单纯以标签才算作子节点的。(但注意,不是完全相同) 有时候,我们可能想在里面添加其他的组件,例如将abc组件注册在里面。那么,我们首先要注册这个abc组件,然后将abc组件在数组里通过createElement来创建标签,只有通过这样的方式创建的abc标签,才能被abc组件使用。单纯输入字符串 "" 这样是不可以的。 如以下代码是可行的:(在通过render方法生成的模板中添加别的组件) 显示结果是:
最后,如果想将原有内容全部使用(而不是只取部分标签),那么直接使用 this.$slots.default 作为第三个参数即可,他本身就是一个数组。 3、总而言之,createElement方法的作用就是动态的创建一个dom用于被render函数渲染,其中参数二和参数三可以选择性省略,参数二用于设置dom的样式、属性、事件等,参数三用于设置分发的内容,包括新增的其他组件。 粗略理解的话,可以理解为:createElement( 标签名,标签属性,标签里的内容) 这样的话,我们就有了一个组件的模板所需要的全部内容了 1、render方法的实质就是生成template模板; 2、通过调用一个方法来生成,而这个方法是通过render方法的参数传递给他的; 3、这个方法有三个参数,分别提供标签名,标签相关属性,标签内部的html内容 4、通过这三个参数,可以生活曾一个完整的模板。 备注:1、render方法可以使用JSX语法,但需要Babel plugin插件; 2、render方法里的第三个参数可以使用函数来生成多个组件(特别是如果他们相同的话),只要生成结果是一个数组,且数组元素都是VNode即可 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |