iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue3渲染函数(h函数)的变更剖析
  • 187
分享到

vue3渲染函数(h函数)的变更剖析

vue3渲染函数vue3h函数 2022-11-13 18:11:26 187人浏览 独家记忆
摘要

目录vue3 渲染函数(h函数)的更改h函数的三个参数详细说明Vnode Props 格式化 Vue2.x 语法VNode Props 格式化 vue3.x 语法vue2中rende

vue3 渲染函数(h函数)的更改

h函数的更改总结
1==>h 现在全局导入,而不是作为参数传递给渲染函数
2==>渲染函数参数更改为在有状态组件和函数组件之间更加一致
3==>vnode 现在有一个扁平的 prop 结构

h函数的三个参数详细说明

第一个参数是必须的。【跟原来的是一样的。没有发生变化】
类型:{String | Object | Function} 
一个 html 标签名、一个组件、一个异步组件、或一个函数式组件。
是要渲染的html标签。
第一个参数div  是表示创建一个div的元素 

第二个参数是可选的。 
【第二个参数的格式发生了变化, 现在是一个扁平的 prop 结构】
类型:{Object} 主要是当前html中的各种属性。
在开发时。建议传,实在没有传的时候,传入 null

第三个参数可选的。(第三个参数建议使用函数返回,否者会有警告)
类型:{String | Array | Object} children
虚拟子节点(vnodes),当前html标签的元素。

ps:第三个参数建议使用函数返回。否者在控制有警告
Non-function value encountered for default slot. Prefer function slots for better perfORMance. 

VNode Props 格式化 vue2.x 语法

{
  class: ['button', 'is-outlined'],
  style: { color: '#34495E' },
  attrs: { id: 'submit' },
  domProps: { innerHTML: '' },
  on: { click: submitForm },
  key: 'submit-button'
}

VNode Props 格式化 vue3.x 语法

{
  class: ['button', 'is-outlined'],
  style: { color: '#34495E' },
  //属性不需要放在 attrs domProps on这些字段下了。
  id: 'submit',
  innerHTML: '',
  onClick: submitForm,
  key: 'submit-button'
}

vue2中render 函数将自动接收 h 函数 (它是 createElement 的常规别名) 作为参数

render(h){
    return h('div',{
      //第二个参数
      class:{
        'is-red': true
      }
    },
    //第三个参数  
    [h('p','这是一个render')]
);

vue3 h函数-绑定事件

//renderTest.vue
<script lang="ts">
import { h, Reactive } from 'vue'
export default {
  setup(props, { slots, attrs, emit }) {
    const state = reactive({
      count: 0
    })

    function increment() {
      state.count++
    }
    // 返回render函数
    return () =>
      h(
        'button',
        {
          onClick: increment //这里绑定事件
        },
        state.count
      )
  }
}
</script>

vue3 render函数简单的循环 map

<script lang="ts">
import { h, reactive } from 'vue'
export default {
    setup() {
      const state = reactive({
        listArr: [
          { name: '三悦有了新工作', like: '工作答辩-你为什来这个-为了钱',id:'00' },
          { name: '三悦有了新工作', like: '没有最好的选择,那不太坏的选择也可以吧', id: '01' },
          { name: '三悦有了新工作', like: '没有最好的选择,那不太坏的选择也可以吧', id: '02' },
          { name: '三悦有了新工作', like: '没有那么好,就是比什么都不做多做了一点点而已',id: '03' },
          { name: '三悦有了新工作', like: '能好好说话是因为爱,不能好好说话,是因为太熟悉了就忘了边界', id: '04' }
        ]
      })
      // 返回render函数
      return () =>
        h(
          'ul',
          null,
          [
            state.listArr.map(item => { //通过map进行循环
              return h('li', { key: item.id }, ['剧名:',item.name,'我喜欢的句子:', item.like])
            })
          ]
        )
    }
}
</script>

vue3 默认插槽-slots.default?.()

//renderTest.vue 文件
<script lang="ts">
import { h } from 'vue'
export default {
  setup(props, { slots }) {
    return () =>
      h(
        'div',
        null,
        [  
          h('h1', null, '我组件的默认内容'), 
          h('h2', null, [slots.default?.()]), 
        ]
      )
  }
}
</script>
//页面使用 renderTest.vue这个组件
<template>
    <div class="father-div">
        <renderTest>
            <p>默认插槽</p>
        </renderTest>
    </div>
</template>
<script setup lang="ts">
import renderTest from './renderTest.vue'
</script>

具名插槽

//renderTest.vue 文件
<script lang="ts">
import { h } from 'vue'
export default {
  setup(props, { slots }) {
    return () =>
      h(
        'div',
        null,
        [  
          //第三个参数建议使用函数返回.
          h('h1', null, '我组件的默认内容'), 
          h('h2', null, [slots.details?.()]), 
        ]
      )
  }
}
</script>
//页面使用 renderTest.vue这个组件
<template>
    <div class="father-div">
        <renderTest>
           <template #details>
             <p>我是具名插槽中的内容</p>
           </template>
        </renderTest>
    </div>
</template>
<script setup lang="ts">
import renderTest from './renderTest.vue'
</script>

props 父传子

//renderTest.vue
<script lang="ts">
import { h } from 'vue'
export default {
  props: {
    title: {
      type: String
    }
  },
  setup(props, { slots }) {
    return () =>
      h(
        'div',
        null,
        //接受父组件 props传递过来的数据,第三个参数建议使用函数返回
        props.title
      )
  }
}
</script>
//页面使用 renderTest.vue这个组件
<template>
  <div class="father-div">
    <renderTest title="父组件给的数据"></renderTest>
  </div>
</template>
<script setup lang="ts">
import renderTest from './renderTest.vue'
</script>

emit 子传父

//renderTest.vue 文件
<script lang="ts">
import { h } from 'vue'
//把按钮作为标签需要导入
import { ElButton } from 'element-plus'
export default {
  props: {
    title: {
      type: String
    }
  },
  setup(props, { emit }) {
    return () =>
      h(
        'div',
        null,
        [ 
          //把按钮作为标签需要导入
          h(ElButton, {
            type:"primary",
            // 注意这里需要使用箭头函数,
            onClick: () => emit('myClick', '123')
          }, 
            //第三个参数建议使用函数返回。否者在控制有警告
            // Non-function value encountered for default slot. Prefer function slots for better performance. 
            ()=>'点击我'
          )
  
        ]
      )
  }
}
</script>
//页面使用 renderTest.vue这个组件
<template>
  <div class="father-div">
    <renderTest @myClick="myClick"></renderTest>
  </div>
</template>
<script setup lang="ts">
import renderTest from './renderTest.vue'
const myClick = (mess:string) => { 
    console.log('子组件给的数据', mess)
}
</script>

需要注意的点

1.如果使用ElButton作为标签。需要引入import { ElButton } from 'element-plus'。
否则在页面中无法正常解析。

2. 第三个参数建议使用函数返回。否者在控制有警告
Non-function value encountered for default slot. Prefer function slots for better performance. 

详细地址 :https://cn.vuejs.org/guide/extras/render-function.html#v-if

到此这篇关于vue3渲染函数(h函数)的变化的文章就介绍到这了,更多相关vue3渲染函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: vue3渲染函数(h函数)的变更剖析

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue3渲染函数(h函数)的变更剖析
    目录vue3 渲染函数(h函数)的更改h函数的三个参数详细说明VNode Props 格式化 vue2.x 语法VNode Props 格式化 vue3.x 语法vue2中rende...
    99+
    2022-11-13
    vue3渲染函数 vue3 h函数
  • 详解vue3中渲染函数的非兼容变更
    目录渲染函数API变更 Render函数参数 渲染函数签名更改VNode Props 格式化slot统一 移除$listeners $attrs现在包括class和styl...
    99+
    2022-11-11
  • vue2.x中h函数(createElement)与vue3中的h函数详解
    目录1. vue2.x的 h 函数(createElement)2. vue3 h函数配置项2.1 v-model实现(以下开始为官网实现)2.2 v-on2.3 事件修饰符2.4 ...
    99+
    2022-12-24
    vue3 h函数 vue h函数 vue2.x h函数
  • VUE3中h()函数和createVNode()函数的使用解读
    目录h()函数和createVNode()函数的使用使用方法VUE3中h方法和createVnode的实现在公共包shared里写上ShapeFlags在runtime-core模块...
    99+
    2022-11-13
  • Vue3中的h函数怎么使用
    这篇文章主要讲解了“Vue3中的h函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue3中的h函数怎么使用”吧!简介众所周知,vue内部构建的其实是虚拟DOM,而虚拟DOM是由虚...
    99+
    2023-07-06
  • Vue3中的h函数如何使用
    HelloWorld.vue<script setup lang="ts"> import { ref } from 'vue'; const param = ref("Hello...
    99+
    2023-05-14
    Vue3
  • Vue实例初始化为渲染函数设置检查源码剖析
    目录引言_renderProxy是干什么的initProxy方法总结引言 之前的文章提到,Vue实例化时_init方法做了很多处理,其中就有这么一段: if (__DEV__) { ...
    99+
    2022-11-13
  • Vue3中的h函数及使用小结
    目录简介简单使用参数使用进阶使用函数组件插槽参考资料:专栏目录请点击 简介 众所周知,vue内部构建的其实是虚拟DOM,而虚拟DOM是由虚拟节点生成的,实质上虚拟节点也就是一个js对...
    99+
    2023-03-06
    Vue3 h函数 Vue3 h函数用法
  • vue渲染函数使用的命令是什么
    这篇文章主要介绍“vue渲染函数使用的命令是什么”,在日常操作中,相信很多人在vue渲染函数使用的命令是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue渲染函数使用的命令是什么”的疑惑有所帮助!接下来...
    99+
    2023-07-04
  • 微信小程序中函数定义、页面渲染的示例分析
    这篇文章主要为大家展示了“微信小程序中函数定义、页面渲染的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信小程序中函数定义、页面渲染的示例分析”这篇文...
    99+
    2022-10-19
  • 深度剖析len函数的意义与用法
    深入解析len函数的含义和用途在许多编程语言中,len函数常常用于获取字符串、列表、元组、字典等数据结构的长度。在本文中,我们将深入解析len函数的含义和用途,并提供具体的代码示例。一、len函数的含义len函数是Python标准库中内置的...
    99+
    2023-12-28
    len函数:长度计算 解析:解析原理 用途:应用范围
  • vue2.0$nextTick如何监听数据渲染完成之后的回调函数
    这篇文章主要介绍vue2.0$nextTick如何监听数据渲染完成之后的回调函数,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!vue里面本身带有两个回调函数:一个是`Vue.next...
    99+
    2022-10-19
  • ThinkPHP6,视图的安装及模板渲染和变量赋值 view::fetch() ,view::assgin() ,助手函数
    ThinkPHP6,视图的安装及模板渲染和变量赋值 tp6视图功能由\think\View类配合视图驱动(也即模板引擎驱动)类一起完成,新版仅内置了PHP原生模板引擎(主要用于内置的异常页面输出),如...
    99+
    2023-08-31
    php 前端 开发语言
  • 如何通过php函数解决页面渲染慢的问题?
    在开发网页应用的过程中,页面渲染慢是一个常见的问题。用户访问一个网页时,如果页面渲染时间过长,可能会导致用户的不耐烦,甚至放弃访问。因此,加快页面渲染速度对于提高用户体验和页面性能至关重要。PHP 是一种广泛使用的服务器端编程语言,它拥有丰...
    99+
    2023-10-21
    PHP函数 页面渲染
  • 使用Go语言文档中的html/template.Execute函数渲染模板
    使用Go语言文档中的html/template.Execute函数渲染模板,需要具体代码示例在Web 应用程序的开发中,模板引擎是一个非常重要的部分。模板引擎可以通过将模板文件与数据进行合并,输出最终的 HTML 页面。同时,模板引擎可以将...
    99+
    2023-11-03
    Go语言 html/template Execute函数
  • 深入浅析Vue3中的生命周期函数
    我们上面提及到一个组合式API中的钩子函数都是可以被多次定义,那意义是什么呢?其实很多时候我们是有这种需求的,我们前面的文章中提及到过 我们的Vue3的组合式API就是具有更高的可维护性,每个逻辑都是单独的代码块,那如果我们在页面初始化完成...
    99+
    2023-05-14
    生命周期函数 vue3
  • 解析Golang函数变量的作用域
    Golang函数变量作用域解析,需要具体代码示例Golang是一种开源的静态类型编程语言,注重效率和简洁,其函数变量作用域的解析机制也是开发者需要了解的重要内容之一。本文将介绍Golang中函数变量的作用域以及与其相关的规则,同时提供代码示...
    99+
    2023-12-23
    作用域 解析 Golang函数变量
  • 剖析后OpLog订阅MongoDB的数据变更就没那么难了
    目录前言oplog简介解析oplog代码结语前言 我们开源了一个订阅分发mysql的binlog的项目,一直用的非常好,忽然有天开发说能不能支持MongoDB的数据订阅呢,Mongo...
    99+
    2022-11-13
  • 函数变量作用域的示例分析
    这篇文章将为大家详细讲解有关函数变量作用域的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。局部变量:在函数中,定义的变量就是局部变量,其作用范围仅限函数的内容;形参也是函数内部的变量,也是局不变量...
    99+
    2023-06-15
  • 剖析帝国CMS核心文件e/class/connect.php中的常用函数
    帝国cms下的e/class/connect.php文件中包含了帝国cms常用的一些核心功能函数,加深对connect.php文件中常用函数的了解对于帝国CMS的二次开发来说非常重要。现将帝国CMS的connect.ph...
    99+
    2022-06-12
    帝国CMS 核心文件 常用函数
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作