0

0

JSX与HTML的那些不同

高洛峰

高洛峰

发布时间:2017-03-31 12:02:05

|

2837人浏览过

|

来源于php中文网

原创

在项目中使用ReactJS也已经有大半年了,收获很多也踩过不少坑。不想把这个系列写成抄书似的罗列,旨在总结些常用的技巧及常见的坑,以帮助初心者快速入门,想系统学习的同学还是多阅读文档。

JSX本质上与HTML并多大没关系,标题所说的不同是指语法上的不同。正因为二者比较相似,初心者才会在很多细节地方混淆。

JSX实际是一种语法糖,最终会转换成JavaScript代码,首先我们看一段React最简单的组件结构:

var HelloReact = React.createClass({
    render: function() {
        return (

Hello React

); } }); React.render(, document.querySelector(#container));

首先我们创建了一个只包含h1标签的组件,并将其保存在名为HelloReact的变量中,之后将其作为标签名,渲染到id为"container"的DOM节点中。

这里要注意的是,组件保存的变量名首字母必须大写,否则无法渲染成功。接下来看下jsx被转义后的语法是什么样的:

var HelloReact = React.createClass({
    render: function() {
        React.createElement('h1', {className: 'title'}, 'Hello world')
    }
});
React.render(, document.querySelector(#container));

可以看到使用JSX可以大大简化编写难度,这点在多个组件嵌套时更加明显。正因为JSX的存在使得新手对React的学习成本大大降低。

*此文的示例多是React老版本的语法,新版本的React移除了JSXTransformer.js文件,增加了react-dom.js文件。 博主会在之后的博文中详述新版本的语法及工程创建方法,当然最快的方式还是查阅官方更新文档。

下面列出相似但又不同的地方:

类名

HTML

JSX

模板

HTML

var name = 'Daryl',
    templ = '

' + name + '

'; //

Daryl

 JSX

render: function()
 {    var name = 'Daryl';    return (

{name}

); }

在JSX的语法中,大括号括起来的部分会被当做JavaScript代码来解析。不仅仅是在标签之间,在class、style等等属性赋值时均可以使用大括号来进行。需要注意的是,大括号之之间只能写表达式,而不能写判断等语句。

render: function() {
    var a = 1;
    return (

{++a}

); //正确 } render: function() {    var a = 1; return (

{if (true) {a++;}}

立即学习前端免费学习笔记(深入)”;

//报错 }

对于需要判断状态的情况可以多使用逻辑运算符(||、&&等)以及三目运算符来完成。

render: function()
 {    
 var status = true;    
 return (
); }

如果判断的逻辑比较复杂,简单的表达式无法满足要求,还是使用保存于变量中方法。

render: function() {
  var nowDate = new Date(),
     today = nowDate.getFullYear() + '.' + Number(nowDate.getMonth()+1) + '.' + nowDate.getDate();
  return (

Today is {today}.

); //2016.3.7 }

内嵌样式

HTML

JSX

可以看到JSX中的style属性并不是简单的接收一个字符串,那两层大括号是什么意思呢。其本质是接收一个对象作为参数,最外层的大括号是之前说过的用来解析JS代码的区域,而里面的只是个对象而已。

具体的样式属性名称类似jQuery中的驼峰命名方式。同时可以使用以下的写法:

React.create({
  render: function() {
    return (
  

标题

  

内容

        
); } }); var styles = {   container: {     textAlign: 'center'   },   title: {     fontSize: 20,     fontWeight: bold,     color: '#000'   },   content: {     fontSize: 13,     color: 'rgba(0,0,0,0.5)'   } };

以上这种方式让样式和内容的耦合降低,代码维护也更方便。只不过在使用React开发中,可能更多的人还是习惯使用外联样式表来编写CSS。

其实这种写法应用最多的是在开发React Native项目中,通过StyleSheet创建一个样式集,因为React Native的项目不像普通的WEB工程可以很方便的引入样式表。

 

网胜B2B电子商务系统蓝色风格 2008 SP6.2 普及版
网胜B2B电子商务系统蓝色风格 2008 SP6.2 普及版

  websenB2B是一套经过完善设计的B2B行业网站程序,是windows nt系列环境下最佳的B2B行业网产站解决方案。精心设计的架构与功能机制,适合从个人到企业各方面应用的要求,为您提供一个安全、稳定、高效、易用而快捷的行业网站商务系统。分普及版和商业版等不同版本。一、网胜B2B电子商务系统SP6.2蓝色风格普及版本升级功能说明:1、邮件群发功能:可以选择某一级别的会员,并放入支持html

下载

事件绑定

HTML

JSX 

React.createClass({
    render: function() {
        return (
点我!
); }, handlerClick: function() { alert('让你点你就点?'); } });

在JSX中事件属性都是以驼峰命名的方式,HTML中的内嵌事件的编写方式在JSX语法中是无效的。

 

列表

列表是现在的web应用中是不可缺少的一种结构。传统的方式通常为请求到数据集,通过JS遍历生成节点,添加到DOM中:

var dataArr = [1,2,3,4,5,6,7],
    templ = '';
dataArr.forEach(function(item, index) {
    templ += '
' + item + '
'; }); $('body').append(templ);

如上,是我们使用的一种比较"原始"的方法。React其实是一个状态机,其中数据结构和视图绑定在一起,一切以状态来控制,通过改变数据层触发DOM更改。

虽然在React中也可以直接操作DOM,但是并不提倡,只有在万不得已或者某个东西加入到状态中十分繁琐、代价比较大的情况下才去考虑。

下面我们看下在JSX中是如何渲染列表的:

render: function() {
    var dataArr = [1,2,3,4,5,6,7],
        jsxArr = [];
    dataArr.forEach(function(item, index) {
        jsxArr.push(
  • {item}
  • ); }); return (
      {jsxArr}
    ); }

    上例中jsxArr实为一个每项均为JSX标签模板的数组,这段代码反映出React中一个很重要的特性,JSX标签之前的多子节点可以以数组的方式插入,理解这点就能很快地绕过了React中列表的坑。只是在实际开发中我们通常使用下面的方式:

    render: function() {
        var dataArr = [1,2,3,4,5,6,7];
        return (
        {    dataArr.map(function(item, index) {   return (
    • {item}
    • );   });   }       
    ); }

    当然在列表模板结构比较复杂的情况下,还是建议在return之前生成好,并赋值给某一变量,return时在标签之间插入该变量。

    除了上述这些不同点以外,JSX还有着自己独有的某些属性,比如:ref、key等,博主会在之后的博文里阐述用法。


    相关文章

    HTML速学教程(入门课程)
    HTML速学教程(入门课程)

    HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

    下载

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    c++主流开发框架汇总
    c++主流开发框架汇总

    本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

    3

    2026.01.09

    c++框架学习教程汇总
    c++框架学习教程汇总

    本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

    7

    2026.01.09

    学python好用的网站推荐
    学python好用的网站推荐

    本专题整合了python学习教程汇总,阅读专题下面的文章了解更多详细内容。

    11

    2026.01.09

    学python网站汇总
    学python网站汇总

    本专题整合了学python网站汇总,阅读专题下面的文章了解更多详细内容。

    1

    2026.01.09

    python学习网站
    python学习网站

    本专题整合了python学习相关推荐汇总,阅读专题下面的文章了解更多详细内容。

    4

    2026.01.09

    俄罗斯手机浏览器地址汇总
    俄罗斯手机浏览器地址汇总

    汇总俄罗斯Yandex手机浏览器官方网址入口,涵盖国际版与俄语版,适配移动端访问,一键直达搜索、地图、新闻等核心服务。

    9

    2026.01.09

    漫蛙稳定版地址大全
    漫蛙稳定版地址大全

    漫蛙稳定版地址大全汇总最新可用入口,包含漫蛙manwa漫画防走失官网链接,确保用户随时畅读海量正版漫画资源,建议收藏备用,避免因域名变动无法访问。

    14

    2026.01.09

    php学习网站大全
    php学习网站大全

    精选多个优质PHP入门学习网站,涵盖教程、实战与文档,适合零基础到进阶开发者,助你高效掌握PHP编程。

    2

    2026.01.09

    php网站搭建教程大全
    php网站搭建教程大全

    本合集专为零基础用户打造,涵盖PHP网站搭建全流程,从环境配置到实战开发,免费、易懂、系统化,助你快速入门建站!

    6

    2026.01.09

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    走进 ES6 新标准语法
    走进 ES6 新标准语法

    共15课时 | 1.5万人学习

    ReactJS基础视频教程
    ReactJS基础视频教程

    共14课时 | 2.7万人学习

    ReactJS中文基础视频教程
    ReactJS中文基础视频教程

    共14课时 | 3.1万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号