Vue3_12(h函数 | jsx)

h函数   全局 API | Vue.js https://v3.cn.vuejs.org/api/global-api.html#h

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

h() 函数是一个用于创建 vnode 的一个函数。createVNode() 简化为 h() 函数

接受三个参数:

  1、{String | Object | Function} :一个Html标签名,一个组件,一个异步组件,一个函数式组件【必需】

  2、{Object} Props:与attribute、prop和事件相关的对象【可选填】

  3、{String | Object | Array} children:子VNodes,使用h()创建或者使用字符串获取“文本VNode”、或有插槽的对象【可选填】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#App.vue
<script>
import { h } from "vue";
import HelloWorld from "./HelloWorld.vue";
 
export default {
  //setup 方式
  // setup() {
  //   return () => {
  //     ......
  //   };
  // },
  //render方式
  render() {
    return h("div", null, [
      h(HelloWorld, null, {
        default: (props) =>
          h("span", null, `app传入到HelloWorld中的内容: ${props.name}`)
      })
    ]);
  },
};
</script>
 
#HelloWorld.vue
<script>
  import { h } from "vue";
 
  export default {
    render() {
      return h("div", null, [
        h("h2", null, "Hello World"),
        this.$slots.default ? this.$slots.default({name: "coderwhy"}): h("span", null, "我是HelloWorld的插槽默认值")
      ])
    }
  }
</script>

jsx  渲染函数 | Vue.js https://v3.cn.vuejs.org/guide/render-function.html#jsx

jsx通常会通过Babel来进行转换(React编写的jsx就是通过babel转换的);

1
2
3
4
5
6
7
8
9
10
11
#安装
npm install @vue/babel-plugin-jsx -D
#babel.config.js
module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ],
  plugins:[
    '@vue/babel-plugin-jsx'
  ]
}

jsx组件使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#App.vue
<script>
  import HelloWorld from './HelloWorld.vue';
 
  export default {
    data() {
      return {
        counter: 0
      }
    },
 
    render() {
      const increment = () => this.counter++;
      const decrement = () => this.counter--;
 
      return (
        <div>
          <h2>当前计数: {this.counter}</h2>
          <button onClick={increment}>+1</button>
          <button onClick={decrement}>-1</button>
          <HelloWorld>
          </HelloWorld>
        </div>
      )
    }
  }
</script>
 
#HelloWorld.vue
<script>
  export default {
    render() {
      return (
        <div>
          <h2>HelloWorld</h2>
          {this.$slots.default ? this.$slots.default(): <span>哈哈哈</span>}
        </div>
      )
    }
  }
</script>

  

posted @   Hexrui  阅读(653)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
返回顶部
点击右上角即可分享
微信分享提示