vue3中使用render函数

vue3使用render,h函数(未使用setup语法糖)

1:vue3中需要从vue中先引入h

import { h } from "vue";

2:定义render函数

const renderButton = {
  render: () => {
    return h(
      // 1. 要渲染的标签名称:第一个参数【必需】
      "button",
      // 2. 渲染标签的属性:第二个参数【可选】
      {
        style: {
          color: "#333",
          border: "1px solid #ccc",
        },
        class: "",
        id: "",
        onClick: changeNum,
      },
      // 3. 渲染标签的子元素数组:第三个参数【可选】
      [
        // "render函数文本" 文本内容可以直接写入
        h("p", num.value), // h()创建的VNodes
      ]
    );
  },
};

let num = ref(0);  // vue3中需要使用ref或reactive声明变量,否则无法实现双向数据绑定
const changeNum = () => {
    num.value++    // 改变ref定义的变量值需要使用.value , reactive不需要 
}

// 未使用setup语法糖时需要使用return,使用则无需return即可实现双向数据绑定
return{
    num,
    changeNum
}

3:在template直接当作组件

<renderButton />

之前没有接触过render函数,直接在vue3上进行使用,网上找了很多方法,很多都是在setup中使用,没有找到在setup语法糖中的写法,试了很多次才搞明白,菜🐕飘过

vue3 在setup语法糖中使用render,h函数
 

<template>
  <div>
    <renderButton />
  </div>
</template>

<script setup>
import { h, ref } from "vue";
const renderButton = {
  render: () => {
    return h(
      // 1. 要渲染的标签名称:第一个参数【必需】
      "button",
      // 2. 渲染标签的属性:第二个参数【可选】
      {
        style: {
          color: "#333",
          border: "1px solid #ccc",
        },
        class: "",
        id: "",
        onClick: changeNum,
      },
      // 3. 渲染标签的子元素数组:第三个参数【可选】
      [
        // "render函数文本" 文本内容可以直接写入
        h("p", num.value), // h()创建的VNodes
      ]
    );
  },
};
let num = ref(0);  // vue3中需要使用ref或reactive声明变量,否则无法实现双向数据绑定
const changeNum = () => {
  num.value++    // 改变ref定义的变量值需要使用.value , reactive不需要 
}

</script>

测试结果:

### Vue.jsRender 函数使用Vue.js 中,`render` 函数提供了一种编程方式来描述组件的内容。相比于模板语法,它提供了更大的灵活性和性能优势。 #### 基本概念 Vue 组件可以通过 `template` 或者 `render` 函数两种形式定义其结构[^1]。当采用后者时,开发者可以直接操作虚拟 DOM 节点,这使得某些复杂的场景更容易处理,比如动态创建大量相似节点或集成第三方类 React 库等。 对于 `.vue` 文件来说,默认情况下是利用 `<template>` 来编写 HTML 结构并由框架内部转换成相应的 `render` 方法[^2]。然而,也可以手动指定 `render` 属性来自定义这一过程: ```javascript // 定义一个名为 my-component 的全局组件 Vue.component(&#39;my-component&#39;, { props: [&#39;msg&#39;], render(h) { // h 是 createElement 的缩写, 用于构建 VNodes. return h( &#39;div&#39;, [ h(&#39;h1&#39;, this.msg), h(&#39;p&#39;, &#39;This is a paragraph.&#39;) ] ); } }); ``` 上述例子展示了如何不依赖于模板而完全基于 JavaScript 创建元素树的方式。这里 `h()` 接受三个参数:标签名/其他 VNode、属性对象以及子级数组(可选)。值得注意的是,在实际开发过程中为了提高代码可读性和维护性,通常推荐配合 JSX/Babel 插件一起工作,这样就可以像下面这样做: ```jsx harmony new Vue({ el: &#39;#app&#39;, components: { MyComponent: { props: [&#39;title&#39;], render() { return ( <div> <header>{this.title}</header> <article>Article content</article> </div> ) }, } } }) ``` 这种风格让熟悉 React 开发模式的人感觉更加亲切,并且能够充分利用现代编辑器提供的良好支持特性。 #### 渲染流程概述 从源码到视图呈现的过程涉及多个步骤,其中包括但不限于将模板编译为 AST 抽象语法树,再进一步转化为具体的 `render` 函数,最后依据这些函数生成 Virtual Nodes 并更新真实的 DOM 树状结构[^4]。
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值