Vue入门指北——渲染函数和jsx

简介: Vue入门指北——渲染函数和jsx

前言


在进行vue的开发时,我们往往会遵从vue的规范,在template标签中编写html,在script标签中编写JavaScript,在style标签中编写css。但在有些情况下,尽管这种方式也可以实现我们想要的效果,但是可能编写的时候会比较麻烦,需要很多的判断,但是,如果他能和JavaScript联动起来,我想它肯定会变得更加高效。


渲染函数


比如我们有一个title组件:


// title.vue
<h1>彼时彼刻,恰如此时此刻</h1>
复制代码


在父组件引用:


// page.vue
<title level="1"></title>
<title level="2"></title>
<title level="3"></title>
复制代码


title组件根据传来的level prop动态改变,h标签。你可能想到这么实现:


title.vue
...
<h1 v-if="level === 1">彼时彼刻,恰如此时此刻<slot><slot></h1>
<h2 v-if="level === 2">彼时彼刻,恰如此时此刻<slot><slot></h2>
<h3 v-if="level === 3">彼时彼刻,恰如此时此刻<slot><slot></h3>
...
...
props: {
    level: {
        type: Number,
        required: true
    }
}
...
复制代码


尽管这么写,实现我们想要的效果,但是每次写的时候,h都要再写一遍。如果是业务繁杂的话,结构将会更加复杂。


而这种情况,我们完全可以根据vue提供的render方法来解决。


// title.vue
render(createElement) {
    return createElement(
        'h' + this.level, 
        彼时彼刻,恰如此时此刻
    )
},
props: {
    level: {
        type: Number,
        required: true
    }
}
复制代码


这样看起来,是不是就方便多了。


jsx


当然,通过render回调的 createElement参数来编写可以解决我们的问题。但是如果结构复杂的话,这么写可以说是非常折磨的,而如果也能通过html的形式写的话,那是再好不过的。正好jsx就可以解决我们的问题:


JSX:是一个 JavaScript 的语法扩展。可以在JavaScript中编写html,具有 JavaScript 的全部功能。


具体特性,请参考文档。


安装


npm install @vue/babel-preset-jsx @vue/babel-helper-vue-jsx-merge-props
复制代码


// babel.config.js
module.exports = {
  presets: ['@vue/babel-preset-jsx'],
}
复制代码


有了jsx,我们就可以这样实现:


// title.vue
render(createElement) {
    const tag = `h${this.props.level}`
    return (
        <tag>
            彼时彼刻,恰如此时此刻
        </tag>
    )
},
props: {
    level: {
        type: Number,
        required: true
    }
}


相关文章
|
1月前
|
前端开发 JavaScript 开发者
|
25天前
Vue3 项目的 setup 函数
【10月更文挑战第23天】setup` 函数是 Vue3 中非常重要的一个概念,掌握它的使用方法对于开发高效、灵活的 Vue3 组件至关重要。通过不断的实践和探索,你将能够更好地利用 `setup` 函数来构建优秀的 Vue3 项目。
|
26天前
|
监控 JavaScript 前端开发
Vue 异步渲染
【10月更文挑战第23天】Vue 异步渲染是提高应用性能和用户体验的重要手段。通过理解异步渲染的原理和优化策略,我们可以更好地利用 Vue 的优势,开发出高效、流畅的前端应用。同时,在实际开发中,要注意数据一致性、性能监控和调试等问题,确保应用的稳定性和可靠性。
|
28天前
|
JavaScript API
vue3知识点:ref函数
vue3知识点:ref函数
33 2
|
28天前
|
JavaScript API
vue3知识点:自定义hook函数
vue3知识点:自定义hook函数
26 2
|
28天前
|
API
vue3知识点:reactive函数
vue3知识点:reactive函数
28 1
|
1月前
|
JavaScript
|
1月前
|
JavaScript
vue 组件中的 data 为什么是一个函数 ?
【10月更文挑战第8天】 在 Vue 组件中,`data` 被定义为一个函数而非普通对象,以确保每个组件实例拥有独立的数据空间,避免数据混乱。这种方式还支持数据的响应式更新、组件的继承与扩展,并有助于避免潜在问题,提升应用的可靠性和性能。
22 2
|
1月前
|
JavaScript 开发者
Vue Render函数
【10月更文挑战第11天】 Vue 的 Render 函数提供了一种强大而灵活的方法来创建虚拟 DOM 节点,使开发者能够更精细地控制组件的构建过程。通过 `createElement` 参数,可以动态生成各种元素和组件,实现复杂逻辑和高级定制。尽管使用 Render 函数需要更多代码和对虚拟 DOM 的深入理解,但它在处理复杂场景时展现出巨大的优势。
15 2
|
1月前
|
JavaScript
vue 函数化组件
【10月更文挑战第1天】 Vue.js 的函数化组件通过设置 `functional: true`,使其无状态和无实例,从而减少渲染开销。通过 `render` 函数的 `context` 参数传递数据。示例中,`smart-item` 组件根据 `data.type` 动态选择并渲染 `ImgItem`、`VideoItem` 或 `TextItem` 组件。根实例 `app` 通过按钮切换不同类型的组件数据。函数化组件适用于程序化选择组件和操作传递数据的场景。