五分钟学习React(四):什么是JSX
JSX,即javscript XML,是js内定义的一套XML语法。目前是使用babel作为JSX的编译器。这也是在前几期中载入babel的原因。
Facebook引入JSX是为了解决前端代码工程复杂、维护困难等问题。JSX为我们提供了一种虚拟DOM的实现方式。 通过使用类XML语法的JSX,定义虚拟的DOM,以减少真实DOM的操作,从而提高运行效率。由于JSX的使用,在React项目中创建Components变得相当简单,用户可以将程序逻辑(programming logic)和标记语言(markup)混合在一起使用,促进代码的可读性、可预测性,有效的提高代码的维护效率。
接下来我们讲讲JSX的基本语法:
1. JSX基本定义
const element = <h1>Hello World!</h1>;
ReactDom.render(
element,
document.getElementById('root');
)
从上述代码,我们可以理解JSX的XML语法相当于是一个js的表达式,它可以直接给变量赋值。(其实不是这样,真正的理解【看这里】)
2. JSX内定义表达式
function formatName(user) {
return user.firstName + ' ' + user.lastName;
}
const user = {
firstName: 'Harper',
lastName: 'Perez'
};
const element = (
<h1>
Hello, {formatName(user)}!
</h1>
);
ReactDOM.render(
element,
document.getElementById('root')
);
在JSX的内部,我们可以执行方法(function),可以输入对象。可以直接输出字符串变量等.这里的{}
类似于php中<?php ?>
的语法。
3. JSX内定义属性(Attribute)
const element = <div class="div-test"></div>
const element = <div className="div-test"></div>
JSX的属性定义遵循CamelCase原则。如果定义的是html标签默认的属性,则可以使用html的规则。上面这例子中,两行代码都是用来定义class的属性。
// 这两行的代码效果相同
const element = <div tabIndex="0"></div>;
const element = <div tabindex="0"></div>;
这则例子,定义一个名为tabindex的属性名字,在JSX中遵循使用camelCase格式。当然如果不使用也可以,React依旧可以执行。
const element = <a href={person.link}> </a>
同样的,在属性中也可以添加变量表达式,用{}
来执行。
4. JSX内嵌子标签
const element = (
<div>
<h1>Hello!</h1>
<h2>Good to see you here.</h2>
</div>
);
在这种情况下,必须使用()
来表示。同时JSX中,只能有一个根节点。不能两个节点并列存在,如下:
const element = (
<h1>Hello!</h1>
<h2>Good to see you here.</h2>
);
这种情况,React是无法编译成功。
5.总结
- JSX是一个js内的XML语法,将程序逻辑和标记语言在同一个文件中显示。用利于代码开发和维护
- JSX中,我们引入了虚拟DOM的概念【看这里】
- JSX的基本语法相当灵活,可以表达式内嵌、定义属性等
五分钟学习React(四):什么是JSX的更多相关文章
- 五分钟学习React(三):纯HTML代码搭建React应用
上一期我们使用了React官方的脚手架运行React应用.大家可能会觉得这种方法很繁琐,需要配置各种第三方插件.JQuery时代的前端真是让人怀念.这一期,我就带领大家创建一个"怀旧版&qu ...
- 五分钟学习React(一): 什么是React
在前端的世界里,我们要处理的文件不是太多,而是太少.每天开发项目将html.css.js.图片.字体文件都像大杂烩一般加载都网页上.当应用变得越来越臃肿的时候,会发现js用了那么多全局变量,css的继 ...
- 五分钟学习React(六):元素(Element)和组件(Component)
俗话说"万丈高楼平地起",从这一期开始,我们将使用基于Webpack+Babel的React学习React框架中的一些基础概念.在学习React的过程中经常会把Element.Cl ...
- 五分钟学习React(五):React两种构建应用方式选择
经过这四期的讲解,我们从Hello World应用入手,解释了React最重要的概念JSX,以及两种不同模式的应用构建方法.这一讲我们着重对比传统模式和新模式下的React项目构建,从而为初学者提供学 ...
- 五分钟学习React(二):我的第一个Hello World
我的第一个React应用 接着我们上一期所讲的内容,通过create-react-app脚手架创建的应用,它是基于ES6的语法生成的.我们清空src目录下的文件,并分别创建index.js和index ...
- 正式学习React(四) 前序篇
预热 redux 函数内部包含了大量柯里化函数以及代码组合思想 柯里化函数(curry) 通俗的来讲,可以用一句话概括柯里化函数:返回函数的函数 // example const funcA = (a ...
- 五分钟学习Java8的流编程
1.概述 Java8中在Collection中增加了一个stream()方法,该方法返回一个Stream类型.我们就是用该Stream来进行流编程的: 流与集合不同,流是只有在按需计算的,而集合是已经 ...
- 十分钟学习 react配套的类型检测库——prop-types的运用
js 有时在定义变量的类型为number 或string 时并不会报错,所以prop-types 是专门用来检测react ,以前的版本是把它放到react架构里面 ,现在作为一个独立的库搬出来了,跟 ...
- 正式学习React(四) ----Redux源码分析
今天看了下Redux的源码,竟然出奇的简单,好吧.简单翻译做下笔记: 喜欢的同学自己可以去github上看:点这里 createStore.js import isPlainObject from ' ...
随机推荐
- node.js之路由,中间件,ge请求和post请求的参数
一.路由 1.什么是路由 服务器需要根据不同的URL或请求来执行不一样的操作,我们可以通过路由来实现这个步骤 2.实现路由的方法 2.1.get请求访问网址时,做什么事 1 app.get(" ...
- js判断一些时间范围是否有重复时间段
function isHasRepeatTime(data) { var startTimeArr = []; var endTimeArr = []; (data || []).map(functi ...
- Linux企业运维人员必备150个命令汇总
命令 功能说明 线上查询及帮助命令(2个) man 查看命令帮助,命令的词典,更复杂的还有info,但不常用. help 查看Linux内置命令的帮助,比如cd命令. 文件和目录操作命令(18个) l ...
- GET请求/百度贴吧 有bug
# -*- coding:utf-8 -*- import urllib, urllib2 import re import sys class Cuzz(): """这 ...
- 智能合约语言 Solidity 教程系列5 - 数组介绍
写在前面 Solidity 是以太坊智能合约编程语言,阅读本文前,你应该对以太坊.智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么 本文前半部分是参考Solidity官方文档(当前最新版本: ...
- cell的复用机制
以下全部都是转载自别人的博客:http://blog.sina.com.cn/s/blog_9c3c519b01016aqu.html 转自:http://www.2cto.com/kf/201207 ...
- 通过 Sublime Package Control 安装插件后不能用的解决办法
最近使用 Sublime 写 SASS 的时候需要使用高亮功能,通过 Package Control 安装了相关插件,但是安装之后没有反应,再次打开 Package Control 的时候,已经搜索不 ...
- Java I/O---类体系总结
1.Java I/O常用 (1)File 对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹. (2)FileInputStream 从文件系统中的某个文件中获得输入字节: ...
- pstree 命令详解
作用: 以命令树状图的方式展现进程之间的派生关系, 显示效果比较直观. 选项: -a 显示每个程序的完整指令, 包含路径, 参数或者是常驻服务的标志 -c 不使用精简标示法 -h 列出树状图,特别标明 ...
- python+selenium自动化测试_1
前言 回顾一下python+selenium基础,并整理相关知识点,分享给有需要,在前进道路上的朋友. print打印 #打印Hello World print("Hello World&q ...