//item.vue 文件如下
<template>
<div>
<h1 v-if="id===1">
<slot></slot>
</h1>
<h2 v-if="id===2">
<slot></slot>
</h2>
<h3 v-if="id===3">
<slot></slot>
</h3>
<h4 v-if="id===4">
<slot></slot>
</h4>
</div>
</template> <script>
export default {
name: "item",
props:{
id:{
type:Number,
default:1
}
}
}
</script>

上面这种写法出现的问题

1.那就有太多的if判断
2.有太多的slot
如何去优化这样的情况呢?
我们可以使用jsx去处理这个问题的哈

使用render函数和jsx来解决上面这个问题

//item.vue子组件
<script>
export default {
name: "item",
props:{
id:{
type:Number,
default:1
}
},
// ${this.$slots.default[0].text} 获取传递给子组件的文本节点
render(){
const hText=` <h${this.id}>${this.$slots.default[0].text}</h${this.id}> `
return <div domPropsInnerHTML={hText}></div>
}
}
</script>

使用的页面

<template>
<div>
<!-- 这是自定义的一个组件 -->
<h-title :id="id">Hello World</h-title>
<button @click="next">下一个</button>
</div>
</template> <script>
import Title from './item.vue'
export default {
data() {
return {
id:1
}
},
components: {
"h-title":Title
},
methods:{
next(){
if(this.id==6){
return false
}
this.id++
}
}
}
</script>

上述功能

当我们点击按钮的时候,标题就会从h1-->h6
我们使用jsx和render函数去实现的

render函数的简单使用

当我们点击按钮的时候,可以切换内容
<!-- 子组件 item.vue -->
<script>
export default {
props:{
show:{
type:Boolean,
default:true
}
},
render(){
let ifText
if(this.show){
ifText=<p>你帅</p>
}else{
ifText=<h1>你丑</h1>
}
return (
<div>
{ifText}
</div>
)
}
}
</script>

使用的页面

<template>
<div>
<h-title :show="showFlag">Hello World</h-title>
<button @click="next">改变</button>
</div>
</template> <script>
import Title from './item.vue'
export default {
data() {
return {
showFlag:false
}
},
components: {
"h-title":Title
},
methods:{
next(){
this.showFlag=!this.showFlag
}
}
}
</script>

render函数中执行v-for语句

<script>
export default {
props:{
list:{
type:Array,
default:()=>{
return ['嫣语赋','盛装','开端']
}
}
},
render(){
return (
<h2>
{this.list.map((v)=>{
return <p>{v}</p>
})}
</h2>
)
}
}
</script>

jsx中使用v-model

<script>
export default {
data(){
return{
show:false,
list:[1,2,3,4],
text:'',
}
},
methods:{
input(e){
this.text=e.target.value
}
},
render(){
return (
<div>
<input type="text" value={this.text} onInput={this.input}/>
<p>{this.text}</p>
</div>
)
}
}
</script>

v-vodel其实是语法糖

在jsx中{}中间是没办法写if/for语句的只能写表达式,用三元表达式来当判断了
v-model其实是一个语法糖,主要是使用两个点:传值和监听事件改变值。

jsx中怎么去使用组件了?

很简单,只需要导入进来.
不需要在components属性声明了,直接写在jsx使用就可以了
<script>
import TestCom from '@/components/test-com.vue'
export default {
render(){
return (
<TestCom/>
)
}
}
</script>

render的描述

Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML。
然而在一些场景中,
你真的需要 JavaScript 的完全编程的能力,
这就是 render 函数,它比 template 更接近编译器。

vue中jsx的更多相关文章

  1. Vue中Jsx的使用

    什么是JSX? JSX就是Javascript和XML结合的一种格式.React发明了JSX,利用HTML语法来创建虚拟DOM.当遇到<,JSX就当HTML解析,遇到{就当JavaScript解 ...

  2. Vue中jsx的最简单用法

    最终页面显示效果为 <div class="open-service" style="color: #0199f0; cursor: pointer;"& ...

  3. 在vue中使用jsx语法

    什么是JSX? JSX就是Javascript和XML结合的一种格式.React发明了JSX,利用HTML语法来创建虚拟DOM.当遇到<,JSX就当HTML解析,遇到{就当JavaScript解 ...

  4. vue中使用jsx

    vue中使用jsx 为什么需要使用jsx呢?这个需要搞清楚 其实vue官方也说了,对于那些非常多v-if v-else的情况,就可以尝试使用render函数或者jsx,不过render函数写简单的结构 ...

  5. 在Vue中使用JSX,很easy的

    摘要:JSX 是一种 Javascript 的语法扩展,JSX = Javascript + XML,即在 Javascript 里面写 XML,因为 JSX 的这个特性,所以他即具备了 Javasc ...

  6. vue中使用JSX报错,如何解决

    Support for the experimental syntax 'jsx' isn't currently enabled (32:12): 30 | }, 31 | render() { & ...

  7. Vue 中渲染字符串形式的组件标签

    在vue中如果要渲染字符串形式的标签,vue 提供了 v-html 指令,可以很方便的渲染出来.但是如果这个标签是一个组件,或者element-ui 的组件时,就不能解析出来了,因为v-html 只能 ...

  8. vue中的页面渲染方案

    一.模板渲染 <div id="J_render_app"> <ul v-if="items.length"> <li v-for ...

  9. 理解MVVM在react、vue中的使用

    理解MVVM在react.vue中的使用 一:什么是MVC.为什么不用MVC 1:MVC的含义: M(modal):是应用程序中处理数据逻辑的部分. V (view)  :是应用程序中数据显示的部分. ...

  10. TS 基础及在 Vue 中的实践:TypeScript 都发布 5.0 版本啦,现在不学更待何时!

    大家好,我是 Kagol,OpenTiny 开源社区运营,TinyVue 跨端.跨框架组件库核心贡献者,专注于前端组件库建设和开源社区运营. 微软于3月16日发布了 TypeScript 5.0 版本 ...

随机推荐

  1. 华为云数据库内核专家为您揭秘:GaussDB(for MySQL)并行查询有多快?

    摘要:GaussDB(for MySQL)并行查询为何快人一步?华为云数据库内核专家这样说 本文分享自华为云社区<华为云数据库内核专家为您揭秘:GaussDB(for MySQL)并行查询有多快 ...

  2. 从原理带你掌握Spring MVC拦截处理器知识

    摘要:SpringWebMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于处理器进行预处理和后处理. 本文分享自华为云社区<不讲废话,全程干货,0基础带你学习Spring ...

  3. vue2升级vue3: 全局变量挂载与类型声明

    全局变量挂载 vue2 Vue.prototype.$lm = {} vue3 const app = Vue.createApp({}) app.config.globalProperties.$l ...

  4. 【已解决】无法打开.xlsx文件,xlrd.biffh.XLRDError: Excel xlsx file; not supported

    原因是最近xlrd更新到了2.0.1版本,只支持.xls文件.所以x1 = xlrd.open_workbook("data.xlsx")会报错. 可以安装旧版xlrd,在cmd中 ...

  5. sqlalchemy union 联合查询

    在最近的工作中遇到一个问题,要将两个字段相似的表里的数据统一起来展示在一个统计页面中.如果是单纯的展示数据那很简单,两个表查出来之后组合一下就完事了,但是有坑的地方就是分页和按照时间搜索,这两个功能决 ...

  6. 【源码系列#06】Vue3 Diff算法

    专栏分享:vue2源码专栏,vue3源码专栏,vue router源码专栏,玩具项目专栏,硬核推荐 欢迎各位ITer关注点赞收藏 Vue2 Diff算法可以参考此篇文章[Vue2.x源码系列08]Di ...

  7. Spring Boot 2.x基础教程:使用LDAP来管理用户与组织数据

    很多时候,我们在做公司系统或产品时,都需要自己创建用户管理体系,这对于开发人员来说并不是什么难事,但是当我们需要维护多个不同系统并且相同用户跨系统使用的情况下,如果每个系统维护自己的用户信息,那么此时 ...

  8. Windows环境下,解决无法使用ping命令

    众所周知,ping命令是个非常实用的网络命令:有时,我们会发现在电脑中无法使用ping命令,一般来说,是由于电脑的环境变量出了问题,本文将介绍如何解决这个问题. 1.一般出现ping命令无法使用的情况 ...

  9. <vue 路由 8、keep-alive的使用>

    一.     知识点 1.什么是keep-alive? keep-alive是Vue.js的一个内置组件. 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们.它自身不会渲染一个 DOM 元素,也 ...

  10. 【RK3399】1.RK3399开发板基础配置

    最近在小黄鱼入手了一个RK3399的开发板,RK的芯片我也是第一次使用.FireFly配套提供了完善的教程,可以在他们的WIKI上找到.上面有的内容就不在本文叙述了,大家可以参考教程https://w ...