JSX 简介
JSX
JSX 是 JavaScript 的语法扩展,可以很好的描述 UI 应该呈现出它应有交互的本质形式。会让人联想到模板语言,但 JSX 拥有 JavaScript 的全部功能
```jsx harmony
const element = Hello, World!;
## 为什么要使用 JSX ?
* React 认为渲染逻辑本质上与其他 UI 逻辑内在耦合,比如,在 UI 中需要绑定处理事件、在某些时刻状态发生改变时需要通知到 UI,以及在 UI 中展示准备好的数据
## 在 JSX 中嵌入表达式 ?
* 在 JSX 语法中,你可以在大括号内放置任何有效的 JavaScript 表达式
```jsx harmony
const name = 'josh Perez'
const element = <h1>Hello, {name}</h1>
ReactDOM.render(
element,
document.getElementById('root')
)
JSX 也是一个表达式
在编译之后,JSX 表达式会被转换为普通的 JavaScript 函数调用,并且对其取值后得到 JavaScript 对象
也就是说,你可以在 if 语句和 for 循环的代码块里面使用 JSX
```jsx harmony
function getGreeting(user) { if (user) { return Hello, {formatName(user)}!; } return Hello, Stranger. }
## JSX 特定属性
* 你可以通过使用引号,来将属性值指定为字符串字面量
* 也可以使用大括号,来在属性值中插入一个 JavaScript 表达式
* 对同一属性不能同时使用这两种符号
* 因为 JSX 语法上更接近 JavaScript 而不是 HTML,所以 React DOM 使用 **小驼峰命名** 来定义属性的名称
```jsx harmony
const element = <div tabIndex="0"></div>;
const element = <img src={user.avatarUrl} alt=""/>
使用 JSX 指定子元素
假如一个标签里面没有内容,你可以使用 /> 来闭合标签,就像 XML 语法一样
JSX 防止注入攻击
可以安全地在 JSX 当中插入用户输入内容
React DOM 在渲染所有输入内容之前,默认会进行转义。它可以确保在你的应用中,永远不会注入那些并非自己明确编写的内容。所有的内容在渲染之前都被转换成了字符串,可以有效地防止 XSS 攻击
```jsx harmony
const title = response.potentiallyMaliciousInput; //直接使用是安全的: const element = {title}
## JSX 表示对象
* Babel 会把 JSX 转译成一个名为 React.createElement() 函数调用
* React.createElement() 会预先执行一些检查,以帮助你编写无错代码
* 创建出的对象被称为 “React元素”。它们描述了你希望在屏幕上看到的内容,React 通过读取这些对象,然后使用它们来构建 DOM 以及保持随时更新
```jsx harmony
const element = (
<h1 className="greeting">
Hello, world!
</h1>
);
const element = React.createElement(
'h1',
{className: 'greeting'},
'Hello, world!'
);
// 注意,这是简化过的结构
const element = {
type: 'h1',
props: {
className: 'greeting',
children: 'Hello, world!'
}
}
最后更新于
这有帮助吗?