ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Vue3_12(高级语法) h函数 | jsx

2021-12-27 17:36:59  阅读:341  来源: 互联网

标签:vue return default HelloWorld 12 Vue3 null jsx


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”、或有插槽的对象【可选填】

#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

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

#安装
npm install @vue/babel-plugin-jsx -D
#babel.config.js
module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ],
  plugins:[
    '@vue/babel-plugin-jsx'
  ]
}

jsx组件使用

#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>

  

标签:vue,return,default,HelloWorld,12,Vue3,null,jsx
来源: https://www.cnblogs.com/hexrui/p/15737083.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有