VUE中render渲染函数(h函数)

news2024/10/5 15:10:09

  vue在绝大多数情况下都推荐使用模板来编写html结构,但是对于一些复杂场景下需要完全的JS编程能力,这个时候我们就可以使用渲染函数 ,它比模板更接近编译器

  vue在生成真实的DOM之前,会将我们的节点转换成VNode,而VNode组合在一起形成一颗树结构,就是虚拟DOM(VDOM)

  我们之前编写的 template 中的HTML 最终也是使用渲染函数生成对应的VNode

h()函数参数

  • 参数一:一个html标签名,一个组件或者一个异步组件,或者函数式组件(必要)
  • 参数二:与attr,prop 和事件相对应的对象(可选),不写的话最好用null占位
  • 参数三:子VNode,使用h()函数构建,或者使用字符串获取文本VNode或者有插槽的对象(可选)

基本使用

h()函数可以在两个地方使用:

  • render 函数中
  • setup函数中

render函数中使用

render() {
    return h(
      "div",
      {
        class: "app",
      },
      [
        // 这里this是可以取到setup中的返回值的 
        h("h2", null, `当前计数: ${this.counter}`),
        h("button", {onclick:() => this.counter++}, "+1"),
        h("button", {onclick:() => this.counter--}, "-1"),
      ]
    );
  },

setup函数中使用

 setup() {
    const counter = ref(0);
    return () =>
      h(
        "div",
        {
          class: "app",
        },
        [
          // 这里this是可以取到setup中的返回值的
          h("h2", null, `当前计数: ${counter.value}`),
          h("button", { onclick: () => counter.value++ }, "+1"),
          h("button", { onclick: () => counter.value-- }, "-1"),
        ]
      );
  },

函数组件和插槽使用

引入使用HelloWorld组件,组件有一个默认插槽和一个具名插槽

 setup() {
    const read = shallowRef({name:"zhangsan"});
    setTimeout(() => {
      read.value.name = "lls";
      triggerRef(read);
      console.log(read.value)
    }, 5000)
    return () =>
      h(
       HelloWorld,
       null,
       {
         default:props => h("span", null, `${read.value.name} 
         app传入到组件中的内容${props.name}`),
         usejsx: props => h(usejsx, null)
       }
      );
  },

HelloWorld组件:

  render() {
    return h("div", null, [
      h("h2", null,  "hello world"),[
        this.$slots.default ? this.$slots.default({name:"zhangsan"}):
        h("h2", null, "我是默认插槽"),
        this.$slots.usejsx()
      ]
  ]);
  }

h()函数API

{
  // 和`v-bind:class`一样的 API
  'class': {
    foo: true,
    bar: false
  },
  // 和`v-bind:style`一样的 API
  style: {
    color: 'red',
    fontSize: '14px'
  },
  // 正常的 HTML 特性
  attrs: {
    id: 'foo'
  },
  // 组件 props
  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
      }
    }
  ],
  // Scoped slots in the form of
  // { name: props => VNode | Array<VNode> }
  scopedSlots: {
    default: props => createElement('span', props.text)
  },
  // 如果组件是其他组件的子组件,需为插槽指定名称
  slot: 'name-of-slot',
  // 其他特殊顶层属性
  key: 'myKey',
  ref: 'myRef'
}

使用举例

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/102203.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

巡更标签 “ PE29_BLE_XG

在我们日常中有一些场景涉及到打卡&#xff0c;比如一个设备需要维护&#xff0c;需要每天有工作人员到现场进行检查或者维护操作&#xff0c;目前普通的做法是弄个二维码到场扫码或者本子记录&#xff0c;用记录的方式明显太落后&#xff0c;容易导致监管不好操作&#xff0c;…

STM32 51单片机——搭建keil5的开发环境(ARM)

知识点&#xff1a;keil/proteus搭建概述、环境搭建 实训day1——12月19日 目录 1 keil安装 1.1 安装KEIL5 安装包 步骤1&#xff1a; 步骤2&#xff1a; 步骤3&#xff1a; 步骤4&#xff1a; 步骤5&#xff1a; 1.2 添加License 步骤1&#xff1a; 步骤2&#xff…

LabVIEW中忽略特定错误

LabVIEW中忽略特定错误 在LabVIEW中收到错误&#xff0c;但已经确认它不会对我的应用程序产生负面影响。如何忽略或清除此错误&#xff1f; LabVIEW程序因为出现错误而中止&#xff0c;但希望代码在收到此错误后继续。怎样才能做到这一点&#xff1f; 解决方案 忽略错误有三…

实验9 利用Wireshark软件分析DHCP

目录 一、实验目的及任务 二、实验环境 三、预备知识 四、实验步骤 五、实验报告内容 一、实验目的及任务 1.通过协议分析进一步明确DHCP报文格式中各字段语法语义&#xff1b; 2.进一步明确DHCP工作原理并能够描述 二、实验环境 联网的计算机&#xff1b;主机操作系…

iead中安装Lombok插件、Lombok注解的使用

Lombok插件安装&#xff1a; 1.pom.xml引入Lombok依赖包&#xff1a; <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></dependency>2.file-setting: 安装Lom…

Python中变量的定义和使用规则

一、如何理解Python中的变量 在解释变量这个东东之前&#xff0c;我先给大家看一组代码&#xff0c;如下图&#xff1a; 上图里面&#xff0c;a作为变量&#xff0c;每次存放的数据和数据类型都不同。看到这里大部分人应该明白了&#xff0c;变量就是随时都可以改变的量&#…

[附源码]计算机毕业设计Python的桌游信息管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

UG/NX二次开发Siemens官方NXOPEN实例解析—2.2 Selection

列文章目录 UG/NX二次开发Siemens官方NXOPEN实例解析—2.1 AssemblyViewer UG/NX二次开发Siemens官方NXOPEN实例解析—2.2 Selection 列文章目录 文章目录 前言 一、知识点提取 二、案例需求分析 三、程序分析 总结 前言 随着工业智能化的不断发展&#xff0c;UG二次开…

代码随想录训练营第十二天

专题&#xff1a;栈和队列 题目&#xff1a;滑动窗口最大值 给定一个数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 题目解析&#xff1a;…

【Flink实时数仓】数据仓库项目实战 《五》流量域来源关键词粒度页面浏览各窗口汇总表 【DWS】

文章目录【Flink实时数仓】数据仓库项目实战 《五》流量域来源关键词粒度页面浏览各窗口汇总表 【DWS】1.1流量域来源关键词粒度页面浏览各窗口汇总表&#xff08;FlinkSQL&#xff09;1.1.1 主要任务1.1.2 思路分析1.1.3 图解1.1.4 代码【Flink实时数仓】数据仓库项目实战 《五…

第七章Servlet

文章目录什么是Servlet为什么需要Servlet从不同角度来看Servlet总过程Servlet之间的继承关系Servlet接口接口中方法GenericServlet抽象方法HttpServlet 抽象子类小结Servlet生命周期从Servlet接口方法开始修改Servlet创建对象的时机Servlet容器Servlet相关的保存作用域request&…

零基础如何学好Python开发?

作为一个零基础小白想学好Python开发应该先确定明确目标、做好学习Python系统规划、选择适合的开发工具、进阶提升学习规划、多练多看加深对Python程序的理解&#xff0c;想入门一门编程语言就需要不断的进行练习。 一、明确目标 很多人在学习Python之前了解很少&#xff0c;很…

ShareSDK 安装教程

一、ShareSDK简介 ShareSDK是一种社会化分享组件&#xff0c;为iOS、Android、WP8 的APP提供社会化功能&#xff0c;集成了一些常用的类库和接口&#xff0c;缩短开发者的开发时间&#xff0c;还有社会化统计分析管理后台。ShareSDK移动开发者服务平台由广州掌淘网络科技有限公…

【C++进阶之路第一卷】预编译头加快编译速度

一、前言 最近在写项目的时候&#xff0c;发现随着项目越来越大&#xff0c;编译需要的时间也越来越长&#xff0c; 然后使用了预编译头&#xff0c;时间减少了很多&#xff01; 这个谁用谁知道&#xff0c;很 Nice&#xff01; 1. 预编译头的原理 简单来说就是将一些你认…

广域网简介、PE/CE/P基本概念理解、PPP协议详细介绍、PAP/CHAP认证介绍与配置、PPPOE会话建立详细介绍并配合实验抓包理解报文交互。

3.1.0 广域网&#xff08;简介、PPP、PAP、CHAP、PPPOE&#xff09; 观前温馨提示&#xff1a; 篇幅较大&#xff0c;本章主要有以下大点&#xff0c;可通过目录与右侧导航跳转观看&#xff1a; &#xff08;1&#xff09;广域网基本概念 &#xff08;2&#xff09;PPP协议介…

【Numpy基础知识】在ndarrays上索引

在ndarrays上索引 来源&#xff1a;Numpy官网&#xff1a;https://numpy.org/doc/stable/user/basics.html 文章目录在ndarrays上索引导包【1】基本索引【2】高级索引【3】结合高级索引和基本索引【3】现场访问【4】展开迭代器索引【5】为索引数组赋值【6】处理程序中可变数量的…

Python3 环境搭建

本章节我们将向大家介绍如何在本地搭建 Python3 开发环境。 Python3 可应用于多平台包括 Windows、Linux 和 Mac OS X。 Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等等。)Win 9x/NT/2000Macintosh (Intel, PPC, 68K)OS/2DOS (多个DOS版本)PalmOSNokia 移动手…

浅谈转行Python的看法,分享我的学习方法

今天跟大家聊一下转行Python的看法和经验。本人之前是做Java开发的&#xff0c;后面因为公司需要Python技术&#xff0c;就接触到了Python&#xff0c;我发现Python比Java更加容易理解&#xff0c;简洁&#xff0c;后面随着Python项目的增多干脆就转行做Python开发了。 Python…

LaTeX教程(三)——文档格式排版

文章目录1. 章节目录1.1 生成章节1.2 生成目录2. 交叉引用和脚注2.1 交叉引用2.2 脚注3. 特殊环境3.1 列表3.2 文本对齐3.3 引用环境3.4 代码环境1. 章节目录 1.1 生成章节 写文章或者论文的时候&#xff0c;章节目录可谓是必不可少的&#xff0c;下面我们来聊聊LaTeX怎么处理…

Linux——安装和使用vmtools

实验1 Linux系统初识 一、安装和使用vmtools vmware tools是虚拟机VMware Workstation自带的一款工具&#xff0c;现在介绍ubuntu linux安装VMare tools。它的作用就是使用户可以从物理主机直接往虚拟机里面拖文件。如果不安装它&#xff0c;我们是无法进行虚拟机和物理…