Vue2安装JSX支持

有时候,我们使用渲染函数(render function)来抽象组件,而渲染函数使用Vue的h函数来编写Dom元素相对template语法差别较大,体验不佳,这个时候就派 JSX 上场了。然而在Vue3中默认是带了JSX支持的,而在 Vue2 中使用 JSX,需要安装并使用 Babel 插件:

  • @vue/babel-preset-jsx
  • @vue/babel-helper-vue-jsx-merge-props

安装脚本

npm install @vue/babel-preset-jsx @vue/babel-helper-vue-jsx-merge-props

配置.babelrc文件

module.exports = {
presets: [
'@vue/cli-plugin-babel/preset',
['@vue/babel-preset-jsx',
{
'injectH': false
}]
]
}

template和JSX的使用差异

针对方向

变量绑定

变量绑定由data中的数据由 v-model="value"变为 v-model={this.value}

template语法

<el-input v-model="value" />

JSX语法

<el-input v-model={this.value} />

事件绑定

变量绑定由data中的数据由 @input="inputChange"或v-on:input="inputChange"变为 onInput={this.inputChange}或on-input={this.inputChange}

template语法

<el-input v-model="value" @input="inputChange" v-on:click="inputClick" />

JSX语法

<el-input v-model={this.value} onInput={this.inputChange} on-click={this.inputClick} />

条件渲染

条件渲染由 v-if变为插入JSX 语句段

template语法

<el-input v-model="value" v-if="show" @input="inputChange" v-on:click="inputClick" />

JSX语法

{
if(this.show){
return <el-input v-model={this.value} onInput={this.inputChange} on-click={this.inputClick} />
}
}

列表渲染

变量绑定由data中的数据由 v-for变为插入JSX 语句段

template语法

<el-select v-model={this.form.formula} clearable>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.label">
</el-option>
</el-select>

JSX语法

<el-select v-model={this.form.formula} clearable>
{
this.options.map(item =>{
return (
<el-option
key={item.value}
label={item.label}
value={item.value}>
</el-option>
)
} }
</el-select>

插槽的使用

命名插槽

组件名称:BaseLayout

template语法

<div class="container">
<header>
<!-- 具名插槽 -->
<slot name="header"></slot>
</header>
<main>
<!-- 匿名插槽 -->
<slot></slot>
<!-- 作用域插槽 -->
<slot :main="mainData"></slot>
</main> <footer>
<!-- 具名插槽 -->
<slot name="footer"></slot>
</footer>
</div>

JSX语法

注意:$slots在Vue2.6版本起才支持,在之前使用的是$slotScopeds

<div class="container">
<header>
{
//具名插槽
this.$slots.header
}
</header>
<main>
{
//匿名插槽
this.$slots.default
}
{
//作用域插槽
() => this.$slots.main(this.mainData)
}
</main>
<footer>
{
//具名插槽
this.$slots.footer
}
</footer>
</div>

使用插槽

template语法

<base-layout>
<template #header>
<div>我是头部</div>
</template>
<template #default>
<div>匿名插槽</div>
</template>
<!-- vue2.6之后使用方式 -->
<template #main="mainData">
<div>作用域插槽:{{mainData}}</div>
</template>
<!-- vue2.6之前使用 -->
<template slot="main" slot-scope="mainData">
<div>作用域插槽:{{mainData}}</div>
</template>
<template #footer>
<div>具名插槽</div>
</template>
</base-layout>

JSX语法

<!-- vue2.6之后使用方式 -->
<base-layout>
{{
default: () => <div>匿名插槽</div>,
header: () => <div>我是头部</div>,
main: (mainData) => <div>作用域插槽:{mainData}</div>,
footer: () => <div>具名插槽</div>
}}
</base-layout>
<!-- vue2.6之前使用方式 -->
<base-layout
slotScoped={{
default: () => <div>匿名插槽</div>,
header: () => <div>我是头部</div>,
main: (mainData) => <div>作用域插槽:{mainData}</div>,
footer: () => <div>具名插槽</div>
}}>
</base-layout>

JSX中el-form

el-form需要绑定通过props={{ model:this.form}}来绑定form对象,不能使用model={this.form} ,否则就会出现报错Invalid handler for event “input“: got undefined

render(h){
return (
<el-form
ref="elForm"
class="rule-form"
props={{ model:this.form}} >
</el-form>
)
}

在Vue2和Vue3中JSX的使用集锦的更多相关文章

  1. 如何在 vue3 中使用 jsx/tsx?

    我们都知道,通常情况下我们使用 vue 大多都是用的 SFC(Signle File Component)单文件组件模式,即一个组件就是一个文件,但其实 Vue 也是支持使用 JSX 来编写组件的.这 ...

  2. Vue2 到 Vue3,重温这 5 个常用的 API

    距离Vue3发布已经过去一年多时间了,从Vue2到Vue3是一个不小的升级,包括周边生态等.虽然目前大多数开发者们在使用的仍旧以Vue2为准,但Vue3显然是Vue开发者们未来必须面对的,而且前不久V ...

  3. 【转载】vue3 中如何像 vue2 的 extend 一样挂载未挂载的组件,拿到标签本身($el)

    原文地址:https://blog.csdn.net/qq_39953537/article/details/110437554 vue3 中如何像 vue2 的 extend 一样挂载未挂载的组件, ...

  4. Module Federation 模块联邦 在Vue3中使用Vue2搭建的微服务

    前言: 备注:本文基于对webpack Module Federation有一定了解的情况下 一般情况下使用模块联邦都是会使用相同的版本,如Vue2的组件时在Vue2中使用,但我为什么会在Vue3项目 ...

  5. 关于在vue3中使用vuex与在vue2中使用vuex的区别

    首先vue2中vuex版本是4.x以下,vue3中使用vuex需要保证vuex版本在4.x及以上. 以下说一说怎么在vue3中使用vuex,与vue2大同小异 首先在views新建一个store文件夹 ...

  6. vue2.x/vue3.0中使用ts

    vue2.x(vue-cli3)中使用ts      https://www.jianshu.com/p/3cbcdd766295 https://www.cnblogs.com/xiaohuizha ...

  7. vue3中使用axios如何去请求数据

    在vue2中一般放在created中,但是在vue3中取消了created生命周期,请求方式有两种 直接在setup中去获取数据 setup(props) { const data = reactiv ...

  8. vue3中watch函数

    watch 监听普通类型 let count = ref(1); const changeCount = () => { count.value+=1 }; watch(count, (newV ...

  9. vue 3 学习笔记 (七)——vue3 中 computed 新用法

    vue3 中 的 computed 的使用,由于 vue3 兼容 vue2 的选项式API,所以可以直接使用 vue2的写法,这篇文章主要介绍 vue3 中 computed 的新用法,对比 vue2 ...

  10. 在vue3中使用router-link-active遇到的坑

    在使用 router-link-active 设置链接激活时CSS类名时,发现在例如 /member/order 和 /member/order/:id 这两个都包含 /member/order的路由 ...

随机推荐

  1. GIT多场景下使用

    git对于大家应该都不太陌生,熟练使用git已经成为程序员的一项基本技能,尽管在工作中有诸如 Sourcetree这样牛X的客户端工具,使得合并代码变的很方便.但找工作面试和一些需彰显个人实力的场景, ...

  2. 使用git 将本地代码上传码市私用仓库操作

    1  现在在登录码市建立项目 2   本地建立一个文件夹,然后使用git bash 3   初始化本地库  git init 4,进入刚刚在码云新建的项目里,复制框框里的路径 5,然后在回到本地新建的 ...

  3. 【问题解决】 网关代理Nginx 301暴露自身端口号

    一般项目上常用Nginx做负载均衡和静态资源服务器,本案例中项目上使用Nginx作为静态资源服务器出现了很奇怪的现象,我们一起来看看. "诡异"的现象 部署架构如下图,Nginx作 ...

  4. docker-compose多服务器部署ELK

    多服务器构建ELK es使用1主2从,logstash转发,kibana展现,本文ELK版本使用7.16.1 如果单机测试,请查看docker-compose单服务器部署ELK es-master:1 ...

  5. 曲线艺术编程 coding curves 第十二章 超级椭圆与超级方程(Superellipses and Superformulas)

    第十三章 超级椭圆与超级方程(Superellipses and Superformulas) 原作:Keith Peters https://www.bit-101.com/blog/2022/11 ...

  6. 【后端面经-Java】HashMap详解

    目录 1. HashMap的家族定位 2. HashMap的数据结构 2.1 Hash表的基本概念 2.2 Hash冲突 2.3 HashMap数据结构 3. HashMap的重要变量 3.1 常量 ...

  7. C++面试八股文:std::array如何实现编译器排序?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第25面: 面试官:array熟悉吗? 二师兄:你说的是原生数组还是std::array? 面试官:你觉得两者有什么区别? 二师兄:区别不是很大,原生 ...

  8. PostgreSQL 12 文档: SQL 语法

    SQL 命令   这部分包含PostgreSQL支持的SQL命令的参考信息.每条命令的标准符合和兼容的信息可以在相关的参考页中找到. 目录 ABORT - 中止当前事务 ALTER AGGREGATE ...

  9. Blazor前后端框架Known-V1.2.2

    V1.2.2 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行. 概述 基于C#和Blazor实现的快速开发框架,前后端分离,开箱即用. 跨平台,单 ...

  10. [ESP] 使用Ayla API Reference配网和连Ayla云

    示例用的文档及链接 US Dev Dashboard(查看oem-id和oem-key) https://dashboard-dev.aylanetworks.com/ Ayla API Refere ...