vue用template还是JSX?
各自特点
template
- 模板语法(HTML的扩展)
- 数据绑定使用Mustache语法(双大括号)
<span>{{title}}<span>
JSX
- JavaScript的语法扩展
- 数据绑定使用单引号
<span>{title}<span>
vue官方建议
Vue官方建议使用template模板,但是 :
“更抽象一点来看,我们可以把组件区分为两类:一类是偏视图表现的 (presentational),一类则是偏逻辑的 (logical)。我们推荐在前者中使用模板,在后者中使用 JSX 或渲染函数。这两类组件的比例会根据应用类型的不同有所变化,但整体来说我们发现表现类的组件远远多于逻辑类组件。”
也就是说,在一些特定场景下可以建议使用JSX语法。
JSX语法如何在vue中使用
先看下template的情况
<!--nav-tmpl.vue-->
<template>
<h1 v-if="level === 1">
<slot></slot>
</h1>
<h2 v-else-if="level === 2">
<slot></slot>
</h2>
<h3 v-else-if="level === 3">
<slot></slot>
</h3>
<h4 v-else-if="level === 4">
<slot></slot>
</h4>
<h5 v-else-if="level === 5">
<slot></slot>
</h5>
<h6 v-else-if="level === 6">
<slot></slot>
</h6>
</template>
<script>
export default {
props: {
level: {
type: Number,
default: 1
}
}
};
</script>
是不是很多v-if-else 看的眼花缭乱?
别着急,来看jsx大法。
// nav-jsx.jsx
export default {
props: {
level: {
type: Number,
default: 1
}
},
render: function(h) {
const Tag = `h${this.level}`;
return <Tag>{this.$slots.default}</Tag>;
}
};
是不是简洁了许多?!
jsx组件使用的方式和vue组件相同,先导入,然后components注册,就可以使用了。
<template>
<div class="demo">
<Nav :level="2">标题</Nav>
<navjsx :level="1">标题</navjsx>
</div>
</template>
<script>
import Nav from "@/components/Nav.vue";
import navjsx from "@/components/nav.jsx";
export default {
components: { Nav,navjsx },
data() {
return {}
}
};
template和jsx混用
我们也可以混用template和jsx语法。通过在components中注册一个函数式组件,渲染jsx语法的标签。
<template>
<div class="demo">
<Nav :level="2">{{this.title}}</Nav>
<navjsx :level="1">{{this.title}}</navjsx>
<VNodes :vnodes="showJSX(1)" />
</div>
</template>
<script>
import Button from "@/components/Button.vue";
import Nav from "@/components/Nav.vue";
import navjsx from "@/components/nav.jsx";
export default {
components: {
Button,Nav,navjsx,
VNodes: {
functional: true,
render: (h, ctx) => ctx.props.vnodes
}
},
data() {
return {
title: "标题",
};
},
methods: {
showJSX(level) {
const Tag = `h${level}`;
return <Tag>{this.title}</Tag>;
}
},
</script>
vue用template还是JSX?的更多相关文章
- 一字一句的搞懂vue-cli之vue webpack template配置
webpack--神一样的存在.无论写了多少次,再次相见,仍是初见.有的时候开发vue项目,对尤大的vue-cli感激涕零.但是,但是,但是...不是自己的东西,真的很不想折腾.所以,我们就得深入内部 ...
- vue 模板template
入门 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...
- vue使用render渲染&jsx
vue&jsx文档 vue实例属性 // App.ts import hBtn from './components/hBtn' import hUl from './components/h ...
- vue写template的4种形式
1.template标签(非单文件组件) <template id="t1"> <h2>66666666</h2> </template& ...
- [Vue-rx] Stream an API using RxJS into a Vue.js Template
You can map remote data directly into your Vue.js templates using RxJS. This lesson uses axios (and ...
- vue中template的作用及使用
先来看一个需求:下图div用v-for做了列表循环,现在想要span也一起循环,应该怎么做? 有3种方法可以实现 ①:直接用v-for对span也循环一次(该方法虽然可以使用,但不要用这种方式,因为 ...
- vue中Template 制作模版
一.直接写在选项里的模板 直接在构造器里的template选项后边编写.这种写法比较直观,但是如果模板html代码太多,不建议这么写. javascript代码: var app=new Vue({ ...
- Vue组件template模板字符串几种写法
在定义Vue组件时,组件的模板template选项需要的是一个字符串,当其内容较复杂需要换行时,需要简单处理一下,具体有五种方式: 方式一:使用 \ 转义换行符 <!DOCTYPE html&g ...
- vue中template的三种写法
第一种(使用模板字符串)早期字符串拼接年代 <div id="app"></div> new Vue({ el: "#app", tem ...
随机推荐
- [LC] 102. Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- 98)PHP,文件类型获取和创建文件夹
看手册 finfo这个类:This class provides an object oriented interface into the fileinfo functions. 这个$mime_ ...
- Redis实现高并发分布式锁
分布式锁场景在分布式环境下多个操作需要以原子的方式执行首先启一个springboot项目,再引入redis依赖包: <!-- https://mvnrepository.com/artifa . ...
- python语法基础-常用模块-re模块
############### re模块 ################ 正则表达式的规则: # re模块 # 正则表达式,就是做字符串匹配的,在re模块出现之前就有这个正则表达式了,任 ...
- css3动画贝塞尔曲线cubic-bezier,css3动画的五种情况
当大家开始做css3动画的时候,了解贝塞尔曲线就成了不可或缺的.“贝赛尔曲线”是由法国数学家Pierre Bézier所发明,由此为计算机矢量图形学奠定了基础.它的主要意义在于无论是直线或曲线都能在数 ...
- 从源码看commit和commitAllowingStateLoss方法区别
Fragment介绍 在很久以前,也就是我刚开始写Android时(大约在2012年的冬天--),那时候如果要实现像下面微信一样的Tab切换页面,需要继承TabActivity,然后使用TabHost ...
- [LC] 318. Maximum Product of Word Lengths
Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...
- java 面向对象 购物车
一个商城包括多个商品.多个用户.拥有销售商品.展示商品和查找商品功能.2) 一个用户拥有一个购物车,购物车具有结算功能.3) 商城具有名称,静态字符串类型4) 用户类是抽象类,两个子 ...
- python-倒序循环
有时候循环需要用到倒序,所以整理一下倒序循环的方法 方法1: 如果要倒序遍历访问序列中的元素,可以对该序列使用reversed() 函数,reversed函数会生成一份倒序列表的拷贝,但是不会改变原列 ...
- SHELL用法三(变量及参数设置)
京峰JF2115-Day45上课笔记 1.SHELL编程变量命名规范: 变量分为:系统变量.环境变量.用户变量: 定义变量时使用=赋值,无需通过declare定义变量的类型: 变量赋值时,=前后是不能 ...