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 更接近编译器。
遇见问题,这是你成长的机会,如果你能够解决,这就是收获。
作者:晚来南风晚相识
出处:https://www.cnblogs.com/IwishIcould/
本文版权归作者所有,欢迎转载,未经作者同意须保留此段声明,在文章页面明显位置给出原文连接
如果文中有什么错误,欢迎指出。以免更多的人被误导。
出处:https://www.cnblogs.com/IwishIcould/
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,或者关注博主,在此感谢!
万水千山总是情,打赏5毛买辣条行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主(っ•̀ω•́)っ✎⁾⁾!
想问问题,打赏了卑微的博主,求求你备注一下的扣扣或者微信;这样我好联系你;(っ•̀ω•́)っ✎⁾⁾!

支付宝

微信
如果文中有什么错误,欢迎指出。以免更多的人被误导。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2020-03-06 vue中render函数使用attrs绑定id、class、style、事件(5)