首页 > 其他分享 >Vue.js 渲染函数和 JSX

Vue.js 渲染函数和 JSX

时间:2023-06-28 16:32:36浏览次数:39  
标签:Vue 函数 渲染 js 组件 JSX 节点

学习目录:

  1. Vue.js 简介
  2. Vue.js 实例与数据绑定
  3. Vue.js 计算属性和侦听器
  4. Vue.js 条件渲染和列表渲染
  5. Vue.js 事件处理
  6. Vue.js 表单输入绑定
  7. Vue.js 组件基础
  8. Vue.js 组件通信
  9. Vue.js 插槽
  10. Vue.js 动态组件和异步组件
  11. Vue.js 自定义指令
  12. Vue.js 过渡和动画
  13. Vue.js 混入
  14. Vue.js 自定义事件和 v-model
  15. Vue.js 渲染函数和 JSX
  16. Vue.js 插件
  17. Vue.js 单文件组件
  18. Vue.js Webpack 配置和打包优化
  19. Vue.js Vue Router
  20. Vue.js Vuex
  21. Vue.js 服务端渲染
  22. Vue.js 代码测试和调试
  23. Vue.js 生态系统
  24. Vue.js 最佳实践和性能优化
  25. Vue.js 应用部署和上线


渲染函数

在 Vue.js 中,渲染函数是一种手动编写 JavaScript 代码来描述组件的结构和行为的方式,用于替代模板渲染。使用渲染函数,可以更加灵活地控制组件的渲染过程,实现一些模板渲染难以实现的功能。

渲染函数的基本用法

Vue.js 中的渲染函数使用 h 函数来创建虚拟节点(VNode),并将其渲染为真实的 DOM 节点。h 函数的用法如下:

h(tag, props, children)

其中,tag 表示节点的标签名,props 表示节点的属性,children 表示节点的子节点。例如:

h('div', { class: 'container' }, [
  h('h1', {}, 'Hello, world!'),
  h('p', {}, 'This is a paragraph.')
])

上述代码创建了一个 div 节点,包含一个 h1 节点和一个 p 节点作为子节点,同时设置了 div 节点的 class 属性为 container

渲染函数的示例代码

下面是一个简单的渲染函数示例,包含一个父组件和一个子组件。父组件中使用渲染函数创建了一个 my-component 节点,并将其渲染到页面上。子组件中使用 h 函数创建了一个 button 节点,并监听 click 事件,当按钮被点击时,触发父组件中的 handleClick 方法。

// 父组件
export default {
  render(h) {
    return h('my-component', {
      on: {
        click: this.handleClick
      }
    }, 'Click me')
  },
  methods: {
    handleClick() {
      alert('Button clicked')
    }
  }
}

// 子组件
export default {
  render(h) {
    return h('button', 'Click me')
  }
}

渲染函数的优点和缺点

渲染函数的优点在于:

  • 更加灵活:渲染函数可以使用 JavaScript 代码来描述组件的结构和行为,相比于模板渲染更加灵活,可以实现更加复杂的组件。
  • 更加高效:由于渲染函数是手动编写的 JavaScript 代码,因此渲染速度相对较快,可以提高组件的渲染效率。
  • 更加可维护:由于渲染函数是 JavaScript 代码,因此可以使用 JavaScript 的语法,例如变量、循环等,使得代码更加易于维护。

渲染函数的缺点在于:

  • 学习成本较高:相比于模板渲染,渲染函数需要具备一定的编码能力和理解成本,学习成本较高。
  • 代码量较大:由于渲染函数是手动编写的 JavaScript 代码,因此代码量相对较大,可能会增加开发难度和维护成本。

JSX

JSX 是一种语法糖,用于将 HTML 结构和 JavaScript 代码结合起来,使得编写组件更加直观和简洁。Vue.js 中也支持使用 JSX 来编写组件。

JSX 的基本用法

JSX 语法类似于 HTML,但是可以嵌入 JavaScript 代码,其中用 {} 包裹的代码表示 JavaScript 表达式。例如:

<div class="container">
  <h1>{ this.title }</h1>
  <p>{ `This is a ${this.type} component.` }</p>
</div>

上述代码创建了一个 div 节点,包含一个 h1节点和一个 p 节点作为子节点,同时设置了 div 节点的 class 属性为 container。在 h1 节点中使用了 this.title 变量,表示组件实例中的 title 属性;在 p 节点中使用了 ${} 包裹的表达式,表示组件实例中的 type 属性加上一段字符串。

JSX 和渲染函数的区别

JSX 和渲染函数有一些区别:

  • 语法不同:JSX 的语法类似于 HTML,而渲染函数使用 JavaScript 代码来描述组件的结构和行为。
  • 可读性不同:由于 JSX 的语法类似于 HTML,因此更加直观和易于阅读,而渲染函数需要一定的编码能力和理解成本。
  • 学习成本不同:相对于渲染函数,JSX 的学习成本较低,因为它的语法类似于 HTML,相对容易理解。
  • 工具支持不同:JSX 可以使用 Babel 等工具将其转换为 JavaScript 代码,从而在浏览器中运行,而渲染函数需要手动编写 JavaScript 代码。

JSX 的示例代码

下面是一个使用 JSX 编写的组件示例,包含一个父组件和一个子组件。父组件中使用 JSX 创建了一个 MyComponent 组件,并将其渲染到页面上。子组件中使用 JSX 创建了一个 button 节点,并监听 click 事件,当按钮被点击时,触发父组件中的 handleClick 方法。

// 父组件
export default {
  render() {
    return (
      <MyComponent onClick={this.handleClick}>
        Click me
      </MyComponent>
    )
  },
  methods: {
    handleClick() {
      alert('Button clicked')
    }
  }
}

// 子组件
export default {
  render() {
    return (
      <button onClick={this.$emit('click')}>
        Click me
      </button>
    )
  }
}

总结

渲染函数和 JSX 都是 Vue.js 中用于手动编写 JavaScript 代码来描述组件的结构和行为的方式。渲染函数更加灵活、高效和可维护,但学习成本较高,代码量较大;JSX 更加直观、易于阅读和学习,但工具支持不如渲染函数。选择哪种方式,取决于具体的开发需求和团队技术水平。


标签:Vue,函数,渲染,js,组件,JSX,节点
From: https://blog.51cto.com/u_16123429/6573750

相关文章

  • vue-element table表格排序推拽功能
    //1.安装sortablejsnpminstallsortablejs--save//2.功能页面中引入importSortablefrom‘sortablejs’具体使用(注意:elementtable务必指定row-key,且row-key必须是唯一的,如id,不然会出现排序不对的情况)<el-tablerow-key="id":data="tableData"style="width:......
  • nextjs项目引入vconsole报错处理:ReferenceError: window is not defined
    引入文件(nextjs项目):importVconsolefrom'vconsole'报错: 处理:letVconsoleif(typeofwindow!=='undefined'){Vconsole=require('vconsole')}打开调试:if(typeofwindow!=='undefined'){//加了一个打开调试......
  • 2023.6.28 - vue项目打包内存堆栈溢出JS stacktrace
    vue项目打包时报错,JSstacktrace:ReachedheaplimitAllocationfailed-JavaScriptheapoutofmemory这是因为node打包时是有内存空间限制的,node能分配多少空间,默认是根据电脑内存占比来算的。在内存比较小的电脑里,默认分配给node的内存可能不足以支撑起项目运行或者打包......
  • postman 发送json请求
    简介:  postman是一个很好的http模拟器,在测试rest服务时是很好用的工具,可以发送get、post、put等各种请求。 发送json的具体步骤:1、选择post请求方式,同时将header的content-type设置为application/json  2、设置body的编码方式为raw,application/json, raw是发送纯文本,不包含......
  • vue3+vite+js配置路径别名
    1、让vscode认识@符号项目下新建jsconfig.json,配置baseUrl,paths参数{"compilerOptions":{"target":"esnext","useDefineForClassFields":true,"module":"esnext","moduleResolution&q......
  • nodeJS常用路径API示例简记
    常用API汇总:process.cwd():返回当前执行node命令时的所在目录path.dirname():返回当前执行文件的所在目录__dirname:返回当前执行文件的所在目录(只能在CommonJS规范下使用)__filename:返回当前执行文件的绝对路径(只能在CommonJS规范下使用......
  • JS中常用方法
    数组splice:splice()方法的第一个参数是起始索引,第二个参数是要删除的元素数量(可以为0),然后可以传递更多的参数作为要插入的新元素。限制删除的数量:constarr=[1,2,3,4,5];constremoved=arr.splice(0,3);console.log(arr);//Output:[4,5]console.log(rem......
  • dayjs 根据时间展示不同的信息
    getTime(data){consttime=this.$dayjs(data).format('YYYYMDD')constnowDate=this.$dayjs().format('YYYYMDD')//今天constyesterday=this.$dayjs().subtract(1,'day').format('YYYYMDD')//前一......
  • VUE http大文件断点续传上传
    ​ 对于大文件的处理,无论是用户端还是服务端,如果一次性进行读取发送、接收都是不可取,很容易导致内存问题。所以对于大文件上传,采用切块分段上传,从上传的效率来看,利用多线程并发上传能够达到最大效率。 本文是基于springboot+vue实现的文件上传,本文主要介绍服务端实现文件......
  • vue中watch侦听器,deep和immediate的用法
    1、deep深度监听的用法当监听一个对象时,可能想监听整个对象的变化,而不仅仅是某个属性。但在默认情况下,如果你正在监听formData对象并且修改了formData.username,对应的侦听器并不会触发,它只在formData对象被整个替换时触发。监听整个对象被称作深度监听,通过将deep选项设置为true......