返回顶部
首页 > 资讯 > 精选 >vue渲染函数使用的命令是什么
  • 144
分享到

vue渲染函数使用的命令是什么

2023-07-04 20:07:28 144人浏览 安东尼
摘要

这篇文章主要介绍“Vue渲染函数使用的命令是什么”,在日常操作中,相信很多人在vue渲染函数使用的命令是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue渲染函数使用的命令是什么”的疑惑有所帮助!接下来

这篇文章主要介绍“Vue渲染函数使用的命令是什么”,在日常操作中,相信很多人在vue渲染函数使用的命令是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue渲染函数使用的命令是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

vue渲染函数使用“render”命令。vue中是使用模板html语法组建页面的,使用render函数可以用js语言来构建DOM。因为vue是虚拟DOM,所以在拿到template模板时也要转译成Vnode的函数,而用render()函数构建DOM,vue就免去了转译的过程。

在绝大多数情况下,Vue 推荐使用模板语法来创建应用。然而在某些使用场景下,我们真的需要用到 javascript 完全的编程能力。这时渲染函数--render就派上用场了。

1. render函数的介绍

简单的说,在vue中我们使用模板HTML语法组建页面的,使用render函数我们可以用js语言来构建DOM。因为vue是虚拟DOM,所以在拿到template模板时也要转译成VNode的函数,而用render函数构建DOM,vue就免去了转译的过程。

当使用render函数描述虚拟DOM时,vue提供一个函数,这个函数是就构建虚拟DOM所需要的工具。官网上给它起了个名字叫createElement。还有约定的简写叫h。

1.1 虚拟 DOM

Vue 通过建立一个虚拟 DOM 来追踪自己要如何改变真实 DOM。请仔细看这行代码:

return createElement('h2', this.blogTitle)

createElement 到底会返回什么呢?其实不是一个实际的 DOM 元素。它更准确的名字可能是createNodeDescription,因为它所包含的信息会告诉 Vue 页面上需要渲染什么样的节点,包括及其子节点的描述信息。我们把这样的节点描述为“虚拟节点 (virtual node)”,也常简写它为“VNode”。“虚拟 DOM”是我们对由 Vue 组件树建立起来的整个 VNode 树的称呼。

1.2 createElement 接受的参数

// @returns {VNode}createElement(  // {String | Object | Function}  // 一个 HTML 标签名、组件选项对象,或者  // resolve 了上述任何一种的一个 async 函数。必填项。  'div',  // {Object}  // 一个与模板中属性对应的数据对象。可选。  {    // (详情见1.3)  },  // {String | Array}  // 子级虚拟节点 (VNodes),由 `createElement()` 构建而成,  // 也可以使用字符串来生成“文本虚拟节点”。可选。  [    '先写一些文字',    createElement('h2', '一则头条'),    createElement(MyComponent, {      props: {        someProp: 'foobar'      }    })  ])

1.3 render函数的使用

render:(h) => {  return h('div',{    // 给div绑定class属性    class: {      child: true,      more: false    },  // 给div绑定样式  style:{    width:'200px',      height:'200px',  },   // 给div绑定点击事件      on: {      click: () => {        console.log('点击事件')      }    },  })}

1.4 深入render函数数据对象

正如 v-bind:class 和 v-bind:style 在模板语法中会被特别对待一样,它们在 VNode 数据对象中也有对应的顶层字段。该对象也允许你绑定普通的 HTML attribute,也允许绑定如 innerHTML 这样的 DOM 属性 (这会覆盖 v-html 指令)

{  // 与 `v-bind:class` 的 api 相同,  // 接受一个字符串、对象或字符串和对象组成的数组  'class': {    foo: true,    bar: false  },  // 与 `v-bind:style` 的 API 相同,  // 接受一个字符串、对象,或对象组成的数组  style: {    color: 'red',    fontSize: '14px'  },  // 普通的 HTML attribute  attrs: {    id: 'foo'  },  // 组件 prop  props: {    myProp: 'bar'  },  // DOM 属性  domProps: {    innerHTML: 'baz'  },  // 事件监听器在 `on` 属性内,  // 但不再支持如 `v-on:keyup.enter` 这样的修饰器。  // 需要在处理函数中手动检查 keyCode。  on: {    click: this.clickHandler  },  // 仅用于组件,用于监听原生事件,而不是组件内部使用  // `vm.$emit` 触发的事件。  nativeOn: {    click: this.nativeClickHandler  },  // 自定义指令。注意,你无法对 `binding` 中的 `oldValue`  // 赋值,因为 Vue 已经自动为你进行了同步。  directives: [    {      name: 'my-custom-directive',      value: '2',      expression: '1 + 1',      arg: 'foo',      modifiers: {        bar: true      }    }  ],  // 作用域插槽的格式为  // { name: props => VNode | Array<VNode> }  scopedSlots: {    default: props => createElement('span', props.text)  },  // 如果组件是其它组件的子组件,需为插槽指定名称  slot: 'name-of-slot',  // 其它特殊顶层属性  key: 'myKey',  ref: 'myRef',  // 如果你在渲染函数中给多个元素都应用了相同的 ref 名,  // 那么 `$refs.myRef` 会变成一个数组。  refInFor: true}

1.5 约束

组件树中的所有 VNode 必须是唯一的。

这意味着,下面的渲染函数是不合法的:

render: function (createElement) {  var myParagraphVNode = createElement('p', 'hi')  return createElement('div', [    // 错误 - 重复的 VNode    myParagraphVNode, myParagraphVNode  ])}

如果你真的需要重复很多次的元素/组件,你可以使用工厂函数来实现。

例如,下面这渲染函数用完全合法的方式渲染了 20 个相同的段落:

render: function (createElement) {  return createElement('div',    Array.apply(null, { length: 20 }).map(function () {      return createElement('p', 'hi')    })  )}

2. render函数的应用

2.1 渲染一个简单的元素

// app.vue (根组件)<template>  <div id="app">    <myRender></myRender>  </div></template><script>import myRender from './components/myRender'export default {  components:{    myRender  }}</script>
// myRender.vue<script>export default {  render:(h) => {    return h('div',{      class: {        child: true,        more: false      },      attrs: {        id: 'foo',        name: 'child'      },    style: {      width:'100%',        height:'200px',    },      domProps: {        innerHTML: '我是render渲染的子组件'      }    })  }}</script><style scoped>.child {  background: pink  font-size 24px  letter-spacing 2px}.more {  background: red}</style>

vue渲染函数使用的命令是什么

2.2 添加子标签

<script>export default {  render:(h) => {    return h('div',      {        class: 'wrapper',        attrs: {          id: 'wrapper',        },      style: {        width:'100%',          height:'250px'      },      },[        h('h3','标题'),        h('div',{          class: 'content',          attrs: {            id: 'content',          },          style:{            width:'800px',            height:'100px'          },          domProps:{            innerHTML:'我是内容'          }        })      ]    )  }}</script><style scoped>.wrapper   background: pink  letter-spacing 2px  .content     margin 0 auto     background: red    color #ffffff    font-size 24px</style>

vue渲染函数使用的命令是什么

2.3 使用 JavaScript 代替模板功能

只要在原生的 JavaScript 中可以轻松完成的操作,Vue 的渲染函数就不会提供专有的替代方法。

v-if 和 v-for 模板语法中:

<ul v-if="items.length">  <li v-for="item in items">{{ item.name }}</li></ul><p v-else>No items found.</p><script>export default {  data(){    return{      items:[1,2,3]    }  }}</script>

render函数实现:

<script>export default {  render: function (createElement) {    if (this.items.length) {      return createElement('ul', this.items.map(function (item) {        return createElement('li', item.name)      }))    } else {      return createElement('p', 'No items found.')    }  },  data(){    return{      items:[1,2,3]    }  }}</script>

v-model

<script>export default {  render:function(createElement) {    var self = this    return createElement('div',[        createElement('div',{class: 'showContent'},self.inputValue),        createElement('input',{          class: 'content',          domProps:{            value:self.inputValue          },          on:{            input:function(event){              self.inputValue = event.target.value            }          }        })      ]    )  },  data(){    return{      inputValue:''    }  },  watch:{    inputValue:function(){      console.log(this.inputValue)    }  },}</script><style scoped>.showContent  font-size 32px  letter-spacing 2px.content   margin 10px auto   color blue  font-size 24px</style>

vue渲染函数使用的命令是什么

2.4 静态插槽

this.$slots的用法

父组件

<template>  <div id="app">    <myRender>      <template v-slot:header>        <div >          头部        </div>      </template>      <template #footer>        <div >          脚部        </div>      </template>    </myRender>  </div></template><script>import myRender from './components/myRender'export default {  components:{    myRender  }}</script>

子组件

<script>export default {  render:function(createElement) {    let childHeader = this.$slots.header    let childFooter = this.$slots.footer    return createElement(      'div',      {        class: 'showContent',        style:{          width:'100%'        }      },      [        createElement('div',{class:'childHeader'},childHeader),        createElement('div',childFooter),      ]    )  },}</script><style scoped>.showContent  letter-spacing 2px  background-color red  .childHeader     color blue    font-size 24px</style>

vue渲染函数使用的命令是什么

2.5 作用域插槽

this.$scopedSlots的用法

父组件

<template>  <div id="app">    <myRender :myLayout="layout">      <template slot-scope="childMsg">        <div >          {{childMsg.text}}        </div>      </template>    </myRender>  </div></template><script>import myRender from './components/myRender'export default {   data(){    return{      layout:{        header:'头部',        footer:'脚部'      }    }  },  components:{    myRender  }}</script>

子组件

<script>export default {  render:function(createElement) {    let self = this    return createElement(      'div',      {        style:{          width:'100%'        },      },[        self.$scopedSlots.default({          text: this.myLayout.header        })      ]    )  },  props:{    myLayout:Object  }}</script>

vue渲染函数使用的命令是什么

到此,关于“vue渲染函数使用的命令是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: vue渲染函数使用的命令是什么

本文链接: https://lsjlt.com/news/347306.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • vue渲染函数使用的命令是什么
    这篇文章主要介绍“vue渲染函数使用的命令是什么”,在日常操作中,相信很多人在vue渲染函数使用的命令是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue渲染函数使用的命令是什么”的疑惑有所帮助!接下来...
    99+
    2023-07-04
  • vue渲染函数使用哪个命令
    本教程操作环境:windows7系统、vue3版,DELL G3电脑。在绝大多数情况下,Vue 推荐使用模板语法来创建应用。然而在某些使用场景下,我们真的需要用到 JavaScript 完全的编程能力。这时渲染函数--render就派上用场...
    99+
    2023-05-14
    前端 Vue.js
  • 分析vue的渲染是什么
    Vue.js 前端框架在前端开发中,是一个十分流行易用的框架。它的渲染机制是Vue.js的核心机制之一,谈及 Vue.js 渲染也是相当深奥的一部分,它的基本原理和底层机制值得我们去一一剖析和探究。Vue.js 的渲染机制是如何运作的呢?在...
    99+
    2023-05-14
  • vue为什么是异步渲染
    本教程操作环境:windows7系统、vue3版,DELL G3电脑。1、nextTick()的原理及作用nextTick确保我们所操作的DOM是更新之后的。(1)应用场景:在视图更新之后,基于新的视图进行操作。在数据变化后执行的某个操作,...
    99+
    2023-05-14
    Vue 异步渲染
  • Vue的列表渲染指令v-for怎么使用
    这篇文章主要介绍“Vue的列表渲染指令v-for怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue的列表渲染指令v-for怎么使用”文章能帮助大家解决问题。Vue的列表渲染1.1.v-fo...
    99+
    2023-07-04
  • 使用vue渲染页面的教程
    本篇内容介绍了“使用vue渲染页面的教程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vue渲染页面路径图...
    99+
    2024-04-02
  • Vue.js条件渲染、列表渲染及Vue中key值的内部原理是什么
    这篇文章主要介绍“Vue.js条件渲染、列表渲染及Vue中key值的内部原理是什么”,在日常操作中,相信很多人在Vue.js条件渲染、列表渲染及Vue中key值的内部原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希...
    99+
    2023-07-06
  • react条件渲染指的是什么
    这篇文章主要介绍“react条件渲染指的是什么”,在日常操作中,相信很多人在react条件渲染指的是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”react条件渲染指的是...
    99+
    2024-04-02
  • Vue渲染失败的原因是什么及如何解决
    本篇内容介绍了“Vue渲染失败的原因是什么及如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Vue渲染失败原因及解决在进行数据双向绑定...
    99+
    2023-06-30
  • 使用vue进行渲染的过程有哪些
    使用vue进行渲染的过程有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。为什么要使用VueVue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以创建可...
    99+
    2023-06-14
  • react请求数据并渲染的方法是什么
    在React中,可以使用fetch或axios等库来发送请求并获取数据。一般情况下,在组件的生命周期方法中发送请求并在获取到数据后进...
    99+
    2023-10-07
    react
  • Gallery2数据加载及渲染的方法是什么
    要加载和渲染Gallery2的数据,你可以按照以下步骤进行操作: 连接数据库:Gallery2使用MySQL数据库来存储和管理数...
    99+
    2023-10-23
    Gallery2
  • Hybris CommerceUI tag的渲染逻辑是什么
    这篇文章主要介绍“Hybris CommerceUI tag的渲染逻辑是什么”,在日常操作中,相信很多人在Hybris CommerceUI tag的渲染逻辑是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-04
  • ReactQuery渲染优化的方法是什么
    这篇文章主要介绍“ReactQuery渲染优化的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“ReactQuery渲染优化的方法是什么”文章能帮助大家解决问题。isFetching在之前的...
    99+
    2023-07-04
  • vue-cli3.0怎么使用prerender-spa-plugin插件预渲染
    这篇文章主要介绍“vue-cli3.0怎么使用prerender-spa-plugin插件预渲染”,在日常操作中,相信很多人在vue-cli3.0怎么使用prerender-spa-plugin插件预渲染问题上存在疑惑,小编查阅了各式资料,...
    99+
    2023-06-30
  • vue中动态渲染数据时使用$refs无效的解决
    目录vue动态渲染数据时使用$refs获取dom无法获取问题解决办法vue中$refs取值是undefined总结vue动态渲染数据时使用$refs获取dom无法获取问题 场景:在循...
    99+
    2023-01-28
    vue动态渲染数据 vue使用$refs无效 vue渲染数据
  • PHP常用命令执行函数是什么
    这篇文章主要介绍“PHP常用命令执行函数是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP常用命令执行函数是什么”文章能帮助大家解决问题。PHP命令执行函数常配合代码执行漏洞使用, 利用命令...
    99+
    2023-06-30
  • ant-design-vue中table自定义格式渲染的方法是什么
    本篇内容介绍了“ant-design-vue中table自定义格式渲染的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ant-de...
    99+
    2023-07-04
  • 使用Go语言文档中的html/template.Execute函数渲染模板
    使用Go语言文档中的html/template.Execute函数渲染模板,需要具体代码示例在Web 应用程序的开发中,模板引擎是一个非常重要的部分。模板引擎可以通过将模板文件与数据进行合并,输出最终的 HTML 页面。同时,模板引擎可以将...
    99+
    2023-11-03
    Go语言 html/template Execute函数
  • vue怎么渲染从后台获取的json数据
    这篇文章将为大家详细讲解有关vue怎么渲染从后台获取的json数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实例如下$(document).ready(functio...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作