//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 Influx)时序洞察

    摘要:GaussDB(for Influx)是一款基于华为自研的计算存储分离架构,兼容InfluxDB生态的云原生NoSQL时序数据库,提供一站式时序数据存储.分析.展示功能.其中时序洞察提供了针对时 ...

  2. head/reset/revert/rebase代码回滚全解:git提交记录的背后原理

    多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,操作有: 回退(reset):reset是彻底回退到指定的commit版本,该commit后 ...

  3. 如何用AB测试完善产品激励体系

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 用户激励体系,也称用户激励机制,是为了让用户持续使用产品,而设计的一套对应规则.在用户激励体系建立过程中,产品可以 ...

  4. MongoDB 客户端工具,Studio3T 无法启动

    阿里云 MongoDB 创建库添加用户并授权 MongoDB 客户端工具,Studio3T 无法启动,原因可能是因为本地的 java 版本导致 C:\Users\cj218>java -vers ...

  5. CXF WebService 授权&动态调用

    SpringBoot WebService 源代码:https://gitee.com/VipSoft/VipWebService 服务端添加拦截器 import org.apache.cxf.bin ...

  6. 海外加速,让你拥有和 Steam 一样的高速下载

    Hello 各位亲爱的观众老爷们,好久不见呀. 暗影界的大门开了,育碧的限时原价结束了,美末 2 都拿年度游戏奖了,你们有猜到二狗子现在哪里么?听了不要吓一跳,二狗子刚刚抵达夜之城了!什么,你问二狗子 ...

  7. 第17场-快乐AC赛

    A - 看我,看我,我最简单了 POJ - 2387 这道题是以前记录过的最短路板子题,然而我还是脑抽用Floyd交了一发 解题报告:https://www.cnblogs.com/RioTian/p ...

  8. <vue 路由 1、路由的基本使用>

    一.     项目创建 参考如下博客地址创建一个vue的项目 https://www.cnblogs.com/yclh/p/15356171.html   vue学习笔记 二.环境搭建+项目创建 二. ...

  9. docker构建java镜像,运行镜像出现 no main manifest attribute, in /xxx.jar

    背景 本文主要是一个随笔,记录一下出现"no main manifest attribute"的解决办法 问题原因 主要是近期在构建一个镜像,在镜像构建成功后,运行一直提示&quo ...

  10. java - Array 数组反序输出

    通过Array类的静态 sort() 方法可实现对数组排序,sort() 方法提供了许多种重载形式,可对任意类型数组进行升序排序. 然而,Array类中没有类似 js 的 reverse   反序输出 ...