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> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!