程序员鸡皮

文章 分类 评论
76 3 11

站点介绍

一名PHP全栈程序员的日常......

Vue3中h函数

abzzp 2024-08-31 645 0条评论 前端 vue

首页 / 正文
本站是作为记录一名北漂程序员编程学习以及日常的博客,欢迎添加微信BmzhbjzhB咨询交流......

发布于2024-07-04

Vue3认识h函数

Vue推荐在绝大数情况下使用模板来创建你的HTML,然后一些特殊的场景,你真的需要JavaScript的完全编程的能力,这个时
候你可以使用 渲染函数 ,它比模板更接近编译器;

  • 前面我们讲解过VNode和VDOM的概念:

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

    (VDOM);

    1. 事实上,我们之前编写的 template 中的HTML 最终也是使用渲染函数生成对应的VNode;
    2. 那么,如果你想充分的利用JavaScript的编程能力,我们可以自己来编写 createVNode 函数,生成对应的VNode;
  • 那么我们应该怎么来做呢?使用 h()函数:

    1. h() 函数是一个用于创建 vnode 的一个函数;
    2. 其实更准备的命名是 createVNode() 函数,但是为了简便在Vue将之简化为 h() 函数;

h()函数 如何使用呢?

  • h()函数 如何使用呢?它接受三个参数:
h("button", { onClick: increment }, "+1")

// button:标签名
// { onClick: increment } 标签里的属性
// "+1" 标签里的文本
  • 注意事项

    1. 如果没有props,那么通常可以将children作为第二个参数传入;
    2. 如果会产生歧义,可以将null作为第二个参数传入,将children作为第三个参数传

h函数的基本使用

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

    1. render函数选项中;
    2. setup函数选项中(setup本身需要是一个函数类型,函数再返回h函数创建的VNode);
import { h } from 'vue'
    
export default {
    render(){
        return h('div',{class:"app"},"Hello App")
    }
}

h函数计数器案例

options-Api中

<script>
import { h } from 'vue';
export default{
  data(){
    return {
      counter:0
    }
  },
  render(){
    return h("div",{className:"app"},[
      h("h2",null,`当前计数:${this.counter}`),
      h("button",{ onClick: this.increment},"+1"),
      h("button",{ onClick: this.decrement},"-1"),
    ])
  },
  methods:{
    increment(){
      this.counter++
    },
    decrement(){
      this.counter--
    }
  }
}
</script>

setup函数中使用

<script>
  import { h, ref } from 'vue'

  export default {
    setup() {
      const counter = ref(0)

      const increment = () => {
        counter.value++
      }
      const decrement = () => {
        counter.value--
      }

      return () => h("div", { className: "app" }, [
        h("h2", null, `当前计数: ${counter.value}`),
        h("button", { onClick: increment }, "+1"),
        h("button", { onClick: decrement }, "-1"),
        h(Home)
      ])
    }
  }
</script>

Composition-Api 中

<template>
  <render />  
  <h2>内容</h2>
</template>

<script setup>
  import {ref,h} from 'vue';
  import Home from "./Home.vue";

  const counter = ref(0)

  const increment = () =>{
    counter.value++
  }
  const decrement = () =>{
    counter.value--
  }

  const render = () => h("div",{className:"app"},[
    h("h2",null,`当前计数:${counter.value}`),
    h("button",{ onClick:increment },"+1"),
    h("button",{onClick:decrement},"-1"),
    h(Home) // 引入组件
  ])
</script>
  

注意:在setup中需要

实际开发中我们基本不用render函数,如果依然想使用JavaScript的方式渲染,我们一般用JSX来编写逻辑

感谢大家观看,我们下次见

评论(0)

最新评论

  • React中函数组件如何实现? - 前端程序员,PHP程序员,全栈程序员-程序员鸡皮

    [...]export default App 这就是React中用函数的方式实现页面的展示,看得出来React又向函数式编程的开发方式迈进。是否能够成为主流这还要看市场,另外React中的Hook也是函数式编程的体现。后面我们也会写到。如果你还对类组件感兴趣,可以看这一篇文章: React中类组件如何实现?感谢大家观看,我们下次再见。[...]

  • React组件生命周期函数 - 前端程序员,PHP程序员,全栈程序员-程序员鸡皮

    [...]}从上面可以看出,在React中我们使用this.setState来修改变量的值。在这里我们要注意this的指向问题,如果有不懂可以看:函数中的this指向componentDidMountcomponentDidMount是表示组件已被渲染到dom中,被挂载到DOM上,这里就不得不提一下在React中如何引入组件相关的内容了。那么如何引入组件呢?在React中非常简单import HelloWo[...]

  • See details

    of course like your web site but you need to test the spelling on quite a few of your posts. A number of them are rife with spelling problems and I in finding it very troublesome to inform the reality nevertheless I will surely come again again.

  • 晚夜

    新年快乐!

  • abzzp

    十天看一部剧,还可以吧[[呲牙]]

  • ab

    @梦不见的梦 行,谢谢提醒,我优化一下

  • 梦不见的梦

    网站的速度有待提升,每次打开都要转半天还进不来呢

  • abzzp

    @React实战爱彼迎项目(二) - 程序员鸡皮 哪里有问题了,报错了吗?[[微笑]]

  • abzzp

    @Teacher Du 那是怕你们毕不了业,我大学那会儿给小礼品[[发呆]]

  • Teacher Du

    我们大学那会,献血还给学分~

日历

2025年03月

      1
2345678
9101112131415
16171819202122
23242526272829
3031     

文章目录

推荐关键字: React vue JavaScript Golang 观后感 ES6 SEO 读后感

站点公告
本站是作为记录一名北漂程序员编程学习以及日常的博客,欢迎添加微信BmzhbjzhB咨询交流......
点击小铃铛关闭
配色方案