在 React.js 中使用 JSX


JSX 就像一种具有 JavaScript 能力的模板语言。它有助于创建 React 元素。它是 JavaScript 的扩展,用于包含 UI 元素。

示例

let message = <h1>Hello World </h1>;

h1 标签是众所周知的 HTML 标签,但使用 JSX,我们创建了一个包含 h1 标签和“Hello World”消息的变量。

JSX 的用途

虽然创建 React 元素并非必须使用 JSX,但它更直观,并有助于更容易地理解代码。React 秉承将 UI 逻辑和渲染逻辑放在一起的理念。

我们可以构建不同的松散耦合组件来实现关注点分离。

Expression embedding :
let name = ‘Steve’;
const welcomeMessage = <h1>Welcome, {name} </h1>;
ReactDOM.render(
   welcomeMessage,
   document.getElementById(‘app’)
);

在上面的例子中,name 是一个值为 'Steve' 的变量,它用花括号嵌入到 const welcomeMessage 中。

任何有效的 JavaScript 表达式,包括函数,都可以在 JSX 中的花括号内使用。例如:{ 5 * 5 } 将返回 25。

在 JSX 表达式中使用函数的示例:

function getFullName(customer) {
   return customer.firstName + ' ' + customer.lastName;
}
const customer = {
   firstName: 'Amit',
   lastName: 'Sharma'
};
const welcomeCustomer = (
   <h1>
      Welcome, { getFullName(customer) } !
   </h1>
);
ReactDOM.render(
   welcomeCustomer,
   document.getElementById('app')
);

我们可以通过将多行 JSX 代码包装在括号 () 中来添加它们。这也避免了自动分号插入的问题。编译时,JSX 代码将转换为常规 JavaScript 代码。

JSX 元素可以作为参数传递,也可以作为函数调用的返回值。它也可以用于条件语句。

JSX 元素上的属性

JSX 元素上使用的属性名称遵循驼峰命名法。例如:用于添加 CSS 类的类名属性命名为 className(因为 class 是 JavaScript 中的保留关键字,所以使用 className)。

tabIndex - 在常规 HTML 元素中,它将是小写的 tabindex,但在 JSX 中,它将是 tabIndex。

我们可以使用字符串字面量(例如 className="App")或使用带花括号的 JSX 表达式(例如 className={Test})来为属性赋值。

JSX 元素可以包含子元素,如果为空,则可以用 /> 关闭。

JSX 还通过在渲染之前转义嵌入在 JSX 表达式中的值来帮助防止跨站脚本攻击 (XSS)。

Babel 将 JSX 编译成常规 JavaScript 代码。示例:

const message = (
   <div className="welcome">
      Welcome !
   </div>
);

将转换为:

const message = React.createElement(
   'div',
   {className: 'welcome'},
   ' Welcome !'
);

更新于:2019年8月28日

浏览量:321

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告