react version: 15.5.0

快速起步-JSX简介

思考这个变量申明:

const element = <h1>Hello, world!</h1>;

这个有趣的标签语法既不是字符串也不是HTML。

它被称之为 JSX,是 JavaScript 的语法扩展。我们建议使用它来定义React的UI展示。JSX 可能会让你想起模板语言,但它可以使用 JavaScript 的全部功能。

JSX 用于编写 React "elements"。在 下一节,我们将探索如何将它们渲染到DOM中。下面,我们来了解下 JSX 的基础知识。

JSX 中嵌入表达式

你可以在 JSX 中通过 {xxx} 来嵌入 JavaScript 表达式

例如,2 + 2, user.firstName, 和 formatName(user) 都是合法的表达式:

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')
);

CodePen Demo

为了可读性,我们将 JSX 分割为多行。虽然这不是必须的,但在这样做的时候,我们建议将它放在 {} 中,以避免 自动补全分号

JSX 也是一个表达式

编译之后,JSX表达式会变成常规的 JavaScript 对象。

这意味着你可以在 if 语句和 for 循环内部使用 JSX,也可以将其作为参数传递或用来作为返回值:

function getGreeting(user) {
if (user) {
return <h1>Hello, {formatName(user)}!</h1>;
}
return <h1>Hello, Stranger.</h1>;
}

JSX中指定属性

您可以使用引号将字符串文本指定为属性:

const element = <div tabIndex="0"></div>;

你也可以使用 {}JavaScript 表达式作为属性:

const element = <img src={user.avatarUrl}></img>;

在属性中使用 JavaScript 表达式时,不要使用引号包裹大括号。否则,JSX会认为属性值是字符串而不是一个表达式。你可以对字符串使用双引号,对表达式使用花括号,但不能同时使用。

JSX中指定子集

如果是空标签,可以像XML那样使用自闭合标签 />

const element = <img src={user.avatarUrl} />;

JSX 标签也可以包含子集:

const element = (
<div>
<h1>Hello!</h1>
<h2>Good to see you here.</h2>
</div>
);

警告:

由于 JSX 更趋近于 JavaScript 而不是 HTML,React DOM 使用 camelCase(小驼峰) 属性命名约定而不是HTML的属性名称。

例如:class 在JSX中是 classNametabindex 在JSX中是 tabIndex

JSX 防止注入攻击

JSX 中嵌入用户输入是安全的:

const title = response.potentiallyMaliciousInput;
// 安全的:
const element = <h1>{title}</h1>;

默认情况下,React DOM 会在渲染前使用 escapes 编码所有嵌入 JSX 的值。 因此它能确保您永远不会注入任何未明确写入应用程序的内容。所有内容都将在呈现前转换为字符串。这有助于防御 XSS (cross-site-scripting) 攻击。

JSX 代表对象

BabelJSX 编译成 React.createElement() 调用。

这两个例子是等同的:

const element = (
<h1 className="greeting">
Hello, world!
</h1>
);
const element = React.createElement(
'h1',
{className: 'greeting'},
'Hello, world!'
);

React.createElement() 会执行一些检查来帮助您编写无误的代码,但基本上,它是创建如下的对象:

// 注意:以下是简单结构
const element = {
type: 'h1',
props: {
className: 'greeting',
children: 'Hello, world'
}
};

这些对象称之为 "React elements". 你可以将它们视为您想要在屏幕上看到的内容。React 会读取这些对象,并使用它们来构造DOM且保持为最新状态。

下一节我们将探索如何渲染 React elements 到DOM中。

提示:

我们建议为编辑器选择 Babel 语法支持插件,以便 ES6JSX 都能被高亮显示。

【译】快速起步-JSX简介的更多相关文章

  1. 【译】Android系统简介—— Activity

    续上一篇,继续介绍Android系统.上一篇: [译]Android系统简介 本文主要介绍构建Android应用的一些主要概念: Activity Activity是应用程序中一个单独的有UI的页面( ...

  2. React基础篇 - 02.JSX 简介

    JSX 简介 请观察下面的变量声明: const element = <h1>Hello, world!</h1>; 这种看起来可能有些奇怪的标签语法既不是字符串也不是HTML ...

  3. JSX 简介

    JSX 简介 考虑如下变量声明: const element = <h1>Hello, world!</h1>; 这个有趣的标签语法既不是字符串也不是HTML. 它被称为JSX ...

  4. Kafka 快速起步(作者:杜亦舒)

    Kafka 快速起步 原创 2017-01-05 杜亦舒 性能与架构 主要内容:1. kafka 安装.启动2. 消息的 生产.消费3. 配置启动集群4. 集群下的容错测试5. 从文件中导入数据,并导 ...

  5. JUnit三分钟教程 ---- 快速起步

    JUnit三分钟教程 ---- 快速起步 摘自http://lavasoft.blog.51cto.com/62575/65625/ JUnit是个好东西,做大点的项目离不开这东西,实际中用的时候也因 ...

  6. React文档翻译系列(三)JSX简介

    # React文档翻译系列(三)JSX简介 先来看一下下面的变量声明: ``` const element = Hello world! ``` 这种有趣的标签语法既不是字符串也不是HTML. 这种形 ...

  7. Kafka 快速起步

    Kafka 快速起步 原创 2017-01-05 杜亦舒 性能与架构 性能与架构 性能与架构 微信号 yogoup 功能介绍 网站性能提升与架构设计 主要内容:1. kafka 安装.启动2. 消息的 ...

  8. React学习笔记 - JSX简介

    React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...

  9. jsx简介

    react文档笔记 jsx简介 jsx是一种javascript的语法扩展,jsx用来声明React当中的元素. 在jsx中使用表达式 jsx当中的表达式要包含在大括号里.例如2+2,user.fir ...

随机推荐

  1. HBase中此类异常解决记录org.apache.hadoop.ipc.RemoteException(java.io.IOException):

    ERROR: Can't get master address from ZooKeeper; znode data == null   一定注意这只是问题的第一层表象,真的问题是: File /hb ...

  2. Cookie的HttpOnly、secure、domain属性

    Cookie主要属性 Cookie主要属性: path domain max-age expires:是expires的补充,现阶段有兼容性问题:IE低版本不支持,所以一般不单独使用 secure h ...

  3. SQL Server 中的回滚

    USE [TestDB] GO /****** 对象: Table [dbo].[Person] 脚本日期: 11/23/2008 13:37:48 ******/ SET ANSI_NULLS ON ...

  4. 【第三篇】SAP ABAP7.5x新语法之程序结构&SubScreen

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文地址:SAP ABAP7.5x系列之程序结构& ...

  5. c# 遍历类中的方法名称

    //Assembly.Load("namespace").GetType("namespace.class名称"); var t = Assembly.Load ...

  6. 两个列表lst1和lst2,计算两个列表的公共元素和非公共元素

    方法1: 列表推导式 lst1 = [1, 3, 7] lst2 = [3, 5, 4] a = [x for x in lst1 if x in lst2] b = [y for y in (lst ...

  7. Centos7下安装与卸载docker应用容器引擎

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的 Li ...

  8. java基础面试题(Servlet生命周期)

    Servlet运行在Servlet容器中,其生命周期由容器来管理.Servlet的生命周期通过javax.servlet.Servlet接口中的init().service()和destroy()方法 ...

  9. Skip-Gram模型

    Stanford CS224n的课程资料关于word2vec的推荐阅读里包含Word2Vec Tutorial - The Skip-Gram Model 这篇文章.这里针对此文章作一个整理. wor ...

  10. 协程与concurent.furtrue实现线程池与进程池

    1concurent.furtrue实现线程池与进程池 2协程 1concurent.furtrue实现线程池与进程池 实现进程池 #进程池 from concurrent.futures impor ...