vue中jsx
//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的更多相关文章
- Vue中Jsx的使用
什么是JSX? JSX就是Javascript和XML结合的一种格式.React发明了JSX,利用HTML语法来创建虚拟DOM.当遇到<,JSX就当HTML解析,遇到{就当JavaScript解 ...
- Vue中jsx的最简单用法
最终页面显示效果为 <div class="open-service" style="color: #0199f0; cursor: pointer;"& ...
- 在vue中使用jsx语法
什么是JSX? JSX就是Javascript和XML结合的一种格式.React发明了JSX,利用HTML语法来创建虚拟DOM.当遇到<,JSX就当HTML解析,遇到{就当JavaScript解 ...
- vue中使用jsx
vue中使用jsx 为什么需要使用jsx呢?这个需要搞清楚 其实vue官方也说了,对于那些非常多v-if v-else的情况,就可以尝试使用render函数或者jsx,不过render函数写简单的结构 ...
- 在Vue中使用JSX,很easy的
摘要:JSX 是一种 Javascript 的语法扩展,JSX = Javascript + XML,即在 Javascript 里面写 XML,因为 JSX 的这个特性,所以他即具备了 Javasc ...
- vue中使用JSX报错,如何解决
Support for the experimental syntax 'jsx' isn't currently enabled (32:12): 30 | }, 31 | render() { & ...
- Vue 中渲染字符串形式的组件标签
在vue中如果要渲染字符串形式的标签,vue 提供了 v-html 指令,可以很方便的渲染出来.但是如果这个标签是一个组件,或者element-ui 的组件时,就不能解析出来了,因为v-html 只能 ...
- vue中的页面渲染方案
一.模板渲染 <div id="J_render_app"> <ul v-if="items.length"> <li v-for ...
- 理解MVVM在react、vue中的使用
理解MVVM在react.vue中的使用 一:什么是MVC.为什么不用MVC 1:MVC的含义: M(modal):是应用程序中处理数据逻辑的部分. V (view) :是应用程序中数据显示的部分. ...
- TS 基础及在 Vue 中的实践:TypeScript 都发布 5.0 版本啦,现在不学更待何时!
大家好,我是 Kagol,OpenTiny 开源社区运营,TinyVue 跨端.跨框架组件库核心贡献者,专注于前端组件库建设和开源社区运营. 微软于3月16日发布了 TypeScript 5.0 版本 ...
随机推荐
- 事件Event:带你体验鸿蒙轻内核中一对多、多对多任务同步
摘要:本文通过分析鸿蒙轻内核事件模块的源码,深入掌握事件的使用. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十二 事件Event>,原文作者:zhushy . 事件(Event)是一 ...
- 鲲鹏基础软件开发赛道openLooKeng赛题火热报名中,数十万大奖等您来收割
随着云计算.物联网.移动计算.智慧城市.人工智能等领域的发展,各类应用对大数据处理的需求也发生着变化.以实时分析.离线分析.交互式分析等为代表的计算引擎逐渐为各大企业行业发展所看重.作为鲲鹏产业生态的 ...
- 当你运行npm run命令时,会发生什么?
摘要:今天我们来聊一聊运行npm run命令之后会发生什么. 本文分享自华为云社区<运行npm run命令的时候会发生什么?>,作者:gentle_zhou . 先前发了一篇"运 ...
- 创元集团的数智化实践 这次选择了和火山引擎 VeDI 搭档
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,上海创元化妆品有限公司(以下简称"创元集团")与火山引擎数智平台 VeDI 达成合作,旨 ...
- 使用 docker-compose 部署 folkmq 消息中间件
仓库拉取 docker-compose.yml 文件: https://github.com/noear/folkmq/tree/main/deploy version: '3.5' services ...
- Windows 2016 2019 显示桌面图标
运行cmd窗口 输入命令 rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0 弹出桌面图标设置窗口
- 拥抱智能,AI 视频编码技术的新探索
随着视频与交互在日常生活中的作用日益突显,愈发多样的视频场景与不断提高的视觉追求对视频编码提出更高的挑战.相较于人们手工设计的多种视频编码技术,AI 编码可以从大数据中自我学习到更广泛的信号内在编码规 ...
- 【C++开源库】Windows 下编译 libcurl 库
亲测可用: https://codeantenna.com/a/pJaN3omqjp What is libcurl ? libcurl 是一个跨平台的网络协议库,支持 http, https, ft ...
- Goolge Kick Start Round A 2020 (A ~ D题题解)
比赛链接:kick start Round A 2020 A. Allocation 题目链接 题意 给出 \(N\) 栋房子的价格,第 \(i\) 栋房子的价格为 \(A_i\),你有 \(B\) ...
- node pressure and pod eviction
0. overview There are too many guides about node pressure and pod eviction, most of them are specifi ...