大家好,我是卡松。这么多年,大家已经习惯了React用JSX来描述UI。即使在某些场景下使用Vue时,也会选择JSX而不是模板语法。就好像一切都是自然而然发生的一样。但是,如果从历史的趋势来看,模板语法是更自然的选择。接下来我们看看React选择JSX背后的逻辑是什么?这是React生态繁荣到今天的关键因素吗?这篇文章参考了HTML模板语言的概述。模板语言简史。在前端没有足够复杂之前,它作为后端MVC框架的V(view,即视图层)存在。操作视图的主流方法是模板语法。PHP虽然是最好的语言,但是PHP在早期更多是作为一种HTML模板语言出现的,这一点从他的全称HypertextPreprocessor(超文本预处理器)也可以看出。当浏览器请求网页时,服务器会执行模板中的PHP代码,返回填充了变量值的HTML作为数据。例如,在下面的模板中,名称将被填充为一个变量值:
很多服务端语言都实现了PHP风格的模板语法,比如:基于Java的JSP、基于PHP的二次封装、smarty、基于Ecmascript的EJS模板语法都很全面,但是当页面结构复杂,逻辑(PHP代码)难免会和UI(HTML)混在一起。为了更好地展示UI,Github联合创始人ChrisWanstrath开发了Mustache。这是一个重UI轻逻辑的模板解析引擎。几乎所有的主流编程语言都有自己的Mustache实现。对于上面的例子,Mustache的语法是:我的名字是{{name}}
Mustache可以直观的表达UI,但是缺乏表达逻辑的能力。更多的模板语法试图在UI和逻辑之间找到平衡。比如Django的DTL(DjangoTemplateLanguage)不仅使用和Mustache一样的{{}}语法来表达UI中的变量,还包含了很多通用的逻辑,比如:ifelse等流控逻辑{%ifcondition%}...display{%endif%}forin迭代逻辑- {%foruserinuserList%}
- {{user.name}} {%endfor%}
{{name|lower}}
如今,在前端框架的模板语法中,可以看到很多服务器使用的模板语法的影子。如果你是服务端工程师,看到下面这样的Vue模板语法,你一定会很亲切: