返回顶部
首页 > 资讯 > 前端开发 > 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://lsjlt.com/news/170215.html(转载时请注明来源链接)

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

猜你喜欢
  • 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+
    2024-04-02
  • 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函数
  • 渲染函数 & JSX详情
    目录一、基础二、节点、树以及虚拟 DOM1、虚拟 DOM三、createElement 参数1、深入数据对象2、完整示例3、约束四、使用 JavaScript 代替模板功能1、v-i...
    99+
    2024-04-02
  • VUE3中h()函数和createVNode()函数的使用解读
    目录h()函数和createVNode()函数的使用使用方法VUE3中h方法和createVnode的实现在公共包shared里写上ShapeFlags在runtime-core模块...
    99+
    2024-04-02
  • Vue实例初始化为渲染函数设置检查源码剖析
    目录引言_renderProxy是干什么的initProxy方法总结引言 之前的文章提到,Vue实例化时_init方法做了很多处理,其中就有这么一段: if (__DEV__) { ...
    99+
    2024-04-02
  • Vue3中的h函数如何使用
    HelloWorld.vue<script setup lang="ts"> import { ref } from 'vue'; const param = ref("Hello...
    99+
    2023-05-14
    Vue3
  • Vue3中的h函数怎么使用
    这篇文章主要讲解了“Vue3中的h函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue3中的h函数怎么使用”吧!简介众所周知,vue内部构建的其实是虚拟DOM,而虚拟DOM是由虚...
    99+
    2023-07-06
  • html 渲染函数内存泄漏
    问题内容 我面临的问题是,即使仅尝试 200 个请求也会导致程序占用容器的 6gb 内存并最终被 oom 杀死。 我的想法是提取 html 中存在的所有文本节点,然后处理它们以提取它们...
    99+
    2024-02-06
  • Vue3中的h函数及使用小结
    目录简介简单使用参数使用进阶使用函数组件插槽参考资料:专栏目录请点击 简介 众所周知,vue内部构建的其实是虚拟DOM,而虚拟DOM是由虚拟节点生成的,实质上虚拟节点也就是一个js对...
    99+
    2023-03-06
    Vue3 h函数 Vue3 h函数用法
  • vue渲染函数使用哪个命令
    本教程操作环境:windows7系统、vue3版,DELL G3电脑。在绝大多数情况下,Vue 推荐使用模板语法来创建应用。然而在某些使用场景下,我们真的需要用到 JavaScript 完全的编程能力。这时渲染函数--render就派上用场...
    99+
    2023-05-14
    前端 Vue.js
  • vue渲染函数使用的命令是什么
    这篇文章主要介绍“vue渲染函数使用的命令是什么”,在日常操作中,相信很多人在vue渲染函数使用的命令是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue渲染函数使用的命令是什么”的疑惑有所帮助!接下来...
    99+
    2023-07-04
  • vue编译器如何生成渲染函数
    这篇文章主要讲解了“vue编译器如何生成渲染函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue编译器如何生成渲染函数”吧!深入源码createCompiler() 方法 —— 入口文件...
    99+
    2023-06-26
  • vue中的render函数、h()函数、函数式组件详解
    目录一、什么是render二、vue中的render三、函数式组件补充 h函数使用场景一、什么是render 官网:用于编程式地创建组件虚拟 DOM 树的函数。 在我们使用webpa...
    99+
    2023-02-09
    vue render函数 vue  h()函数 vue函数式组件
  • 如何用 Timber 调试 PHP 函数的模版渲染?
    通过以下步骤调试 timber php 模版渲染:安装 timber 调试插件。在你的 config.php 文件中启用调试模式。在你的 twig 模版中使用 {{ dump() }} ...
    99+
    2024-04-23
    php timber composer
  • C++ 函数默认参数和可变参数的内存管理剖析
    默认参数和可变参数的内存管理:默认参数:在函数栈帧中分配内存,大小为其类型的字节数。可变参数:在堆栈帧的尾部分配内存,大小由可变参数数量决定:sizeof(void ) (传入参数数量...
    99+
    2024-04-19
    函数 c++
  • 剖析 PHP 函数的组成元素
    php 函数组成元素:名称:驼峰命名,字母开头;参数列表:可选,可有默认值;函数体:花括号括起,包含执行代码;返回值类型:函数返回的数据类型,可指定为 void;可变参数列表:不定数量参...
    99+
    2024-04-10
    函数 php
  • 剖析 PHP 函数的构成成分
    php函数包含函数名、参数、返回值和函数体等主要部分。它们用于执行特定任务,并可通过调用函数名并传递参数来使用。 剖析 PHP 函数的构成成分 PHP 函数是代码块,用于执行特定任务并...
    99+
    2024-04-10
    函数 php
  • 微信小程序中函数定义、页面渲染的示例分析
    这篇文章主要为大家展示了“微信小程序中函数定义、页面渲染的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信小程序中函数定义、页面渲染的示例分析”这篇文...
    99+
    2024-04-02
  • 深入剖析numpy函数库的核心函数及其应用
    深入研究numpy函数:解析numpy库的核心函数及其应用 引言: NumPy(Numerical Python)是Python科学计算的基础库之一,它提供了高效的多维数组(ndarray)对象和一系列数学函数,使得我们可以在P...
    99+
    2024-01-26
    应用 解析 numpy函数
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作