React中文文档之introducing JSX

introducing JSX
思考下面的变量声明:
const element = <h1>Hello world!</h1>;

这个有趣的标签解析,既不是字符串,也不是HTMl。
它叫做 'JSX',它是对js的一个解析扩展。在React中,我们推荐使用它来描述UI应该是什么样子。JSX可能看着像一个模板语言,但是它具有js的所有能力。
JSX产生 React元素。在下一章节,我们将探讨将它们渲染为DOM。接下来,你可以找到JSX必备的基础知识来开始学习:


embedding expressions in JSX - 在JSX中嵌入表达式
通过将代码包装在 '{}' 中,可以在JSX中,嵌入任何的js表达式
例如,'2 + 2','user.name','formatName(user)' 都是有效的表达式:
		function formatName(user) {
			return user.firstName + ' ' + user.lastName;
		}
		const user = {
			firstName: 'xuemin',
			lastName: 'dong'	
		};
		const element = (
			<h1>
				hello, {formatName(user)}!
			</h1>
		);
		ReactDOM.rend(
			element,
			document.getElementById('root')
		);

我们将JSX代码包裹在 '()' 内,并且为了可读性分割为多行。这也避免了js语法的 '自动插入分号' 的陷阱(如果行尾未添加 ';',js会自动来判断哪里需要添加 ';')。


JSX is an Expression Too - JSX 也是一个表达式
	编译后,JSX表单式变为正常的js对象。
	这意味着,你可以在 'if' 语句和'for' 循环中,使用JSX,将它分配给变量,作为参数接收,或者从函数中返回它。
		function getGreeting(user) {
			if (user) {
				return <h1>Hello, {formatName(user)!}</h1>;
			} else {
				return <h1>Hello, Stranger</h1>
			}
		}

Specifying Attributes with JSX - 使用JSX指定属性
你可以使用引号来指定文本字符串作为属性:
		const element = <div tabIndex="0"></div>;

你也可以使用 '{}' 在属性中嵌入js表单式:
		const element = <img src={user.avatarUrl}></img>;

Specifying Children with JSX - 使用JSX指定子
如果一个标签式空的,可以通过 '/>' 立刻结束,就像 XML(其实就是单标签形式,html的块标签内如果没内容,在JSX中也可以这么结束):
		const element = <img src={user.avatarUrl} />

JSX标签可以包含子:
		const element = (			// JSX包含多行,就得需要使用 '()'
			<div>
				<h1>Hello!</h1>
				<h2>Good to see you here.</h2>
			</div>
		);

警告:
因为JSX更近似js,而不是HTML,React DOM使用 '驼峰式' 属性命名,替代 HTML 属性命名。例如:
class是 className,tabindex 是 tabIndex。(js语法中:class和for都是保留字,应该使用 className, htmlFor)

JSX Prevents Injection Attacks - JSX阻止注入攻击
在JSX中嵌入用户输入是安全的:
		const title = response.name;
		const element = <h1>{title}</h1>;	// 这是安全的

默认情况下,在渲染前,React DOM 对插入到 JSX 中的任何值都进行了过滤


JSX Represents Objects - JSX代表对象
Babel编译JSX为 React.createElement() 调用
下面的2个例子是等价的:
		const element = (
			<h1 className="greeting">
				hello world!
			</h1>
		);
		--- 等价于 ---
		const element = React.createElement(
			'h1',
			{className: 'greeting'},
			'hello world!'
		);

React.createElement() 执行了一些检查来帮助我们写出没有bug的代码,但是最关键的是,它创建了如下的一个对象:
		const element = {
			type: 'h1',
			props: {
				className: 'greeting',
				children: 'hello, world!'	
			}	
		}

这些对象称作 'React elements',你可以认为它们是你想在屏幕上看到的内容的描述。React读取这些对象,并使用它们来构建DOM以及保持更新。
提示:
我们推荐针对你的编辑器查找一个 'Babel' 语法格式解析,这样 ES6 和 JSX 代码会高亮显示。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值