📜  深度反应 JSX(1)

📅  最后修改于: 2023-12-03 14:56:06.473000             🧑  作者: Mango

深度反应 JSX

JSX(JavaScript XML)是一种 JavaScript 的扩展语法,它允许我们在 JavaScript 代码中编写 XML 标签,使得我们可以用一种更加直观的方式编写 React 组件。

基础语法

JSX 中的标签看起来像 HTML 标签,但实际上它们只是 JavaScript 中的对象。在 JSX 中,我们可以使用大括号({})来包含表达式,也可以嵌套多个 JSX 标签。

示例代码:

const element = <h1>Hello, world!</h1>;
JSX 编译原理

React 在编译时将 JSX 语法转换为 JavaScript 函数调用,具体的步骤如下:

  1. 将所有的 JSX 代码转换为 JavaScript 对象;
  2. 调用 React.createElement 方法,将 JavaScript 对象转换成真正的 React 元素(虚拟 DOM);
  3. 将 React 元素渲染到页面上。

示例代码:

const element = <h1>Hello, world!</h1>;
const container = document.getElementById('root');
ReactDOM.render(element, container);

在浏览器中运行上述代码时,React 会将 JSX 代码转换为以下 JavaScript 代码:

const element = React.createElement("h1", null, "Hello, world!");
const container = document.getElementById('root');
ReactDOM.render(element, container);
JSX 中的表达式

我们可以用大括号({})在 JSX 中嵌入 JavaScript 表达式,如变量、函数调用、赋值表达式等。

示例代码:

const name = 'React';
const element = <h1>Hello, {name}!</h1>;
JSX 中的注释

在 JSX 中,我们可以使用 JavaScript 风格的注释,但是注释必须放在大括号中间。

示例代码:

const element = (
  <div>
    {/*这是一个注释*/}
    <h1>Hello, world!</h1>
  </div>
);
JSX 中的样式

我们可以使用内联样式来设置 JSX 元素的样式。在 JSX 中,样式属性的名称采用驼峰命名法,而不是 CSS 中的中横线命名法。值必须用引号(单引号或双引号)括起来。

示例代码:

const style = {
  backgroundColor: 'yellow',
  color: 'red'
};
const element = <h1 style={style}>Hello, world!</h1>;
JSX 中的 className

在 JSX 中,我们应该使用 className 来设置 CSS 类名,而不是 HTML 中的 class 属性。

示例代码:

const element = <h1 className="title">Hello, world!</h1>;
JSX 中的列表

我们可以使用 JavaScript 的 map 方法来遍历数组,生成 JSX 列表。

示例代码:

const names = ['Alice', 'Bob', 'Charlie'];
const element = (
  <ul>
    {names.map(name => <li>{name}</li>)}
  </ul>
);
JSX 中的条件渲染

我们可以使用 JavaScript 的条件表达式来实现 JSX 的条件渲染。

示例代码:

const isLoggedIn = true;
const element = (
  <div>
    {isLoggedIn ? <p>Welcome, user!</p> : <p>Please log in.</p>}
  </div>
);
JSX 中的事件处理

我们可以使用 onXxx 属性来处理 JSX 元素的事件。在此属性中传入一个函数,React 会在特定事件触发时自动调用该函数。

示例代码:

function handleClick() {
  console.log('Button clicked!');
}
const element = <button onClick={handleClick}>Click me</button>;
JSX 和 HTML 的区别

JSX 很像 HTML,但是它们有一些不同之处:

  1. 在 JSX 中,我们需要使用 className 属性来设置 CSS 类名,而不是 class 属性;
  2. 在 JSX 中,我们需要使用 htmlFor 属性来设置 label 元素与外部元素的关联,而不是 for 属性;
  3. 在 JSX 中,我们需要使用大括号来将 JavaScript 表达式包含在 JSX 中。
JSX 的优缺点

优点:

  1. JSX 可以使得我们在编写 React 组件时更加直观,提高开发效率;
  2. JSX 可以像 HTML 一样方便地进行样式和事件处理。

缺点:

  1. JSX 需要编译,增加了代码的复杂度;
  2. JSX 的语法可能会让新手觉得困惑。
总结

本文介绍了 JSX 的基础语法、编译原理、表达式、注释、样式、列表、条件渲染、事件处理等方面的知识点,并且简单比较了 JSX 和 HTML 的区别,以及 JSX 的优缺点。了解了这些知识,相信读者已经掌握了在 React 中使用 JSX 的基本技能。