服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服务器之家 - 编程语言 - JavaScript - React - 聊聊什么是JSX以及在React中的使用

聊聊什么是JSX以及在React中的使用

2024-01-26 14:31海燕技术栈 React

JSX是一种JavaScript的语法扩展,它是一个看起来很像 XML 的 JavaScript 语法扩展。虽然它看起来像模板语言,但实际上它更接近于JavaScript的语法糖。JSX代码在运行时会被转译为普通的JavaScript对象。

1. 什么是JSX?

JSX是一种JavaScript的语法扩展,它是一个看起来很像 XML 的 JavaScript 语法扩展。虽然它看起来像模板语言,但实际上它更接近于JavaScript的语法糖。JSX代码在运行时会被转译为普通的JavaScript对象。

以下是一个简单的JSX示例:

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

在上述代码中,<h1>Hello, JSX!</h1> 就是一个JSX表达式,它将被转译为 React.createElement('h1', null, 'Hello, JSX!')。

2. JSX的基本规则

2.1 标签

在JSX中,标签类似于HTML中的标签,用尖括号包裹,例如 <div>、<h1> 等。

const element = <div>Hello, JSX!</div>;

2.2 嵌套

JSX支持标签的嵌套,就像在HTML中一样。

const element = (
  <div>
    <h1>Hello</h1>
    <p>JSX!</p>
  </div>
);

2.3 表达式

在JSX中,你可以使用花括号 {} 插入JavaScript表达式。

const name = "React";
const element = <p>Hello, {name}!</p>;

2.4 属性

JSX中的属性可以像HTML一样通过键值对的形式进行传递。

const element = <a href="https://www.example.com">Visit Example</a>;

2.5 类名和样式

使用JSX时,类名需要写成 className,而不是 class,而内联样式则需要使用一个JavaScript对象。

const element = <div className="my-class" style={{ color: 'red' }}>Styled Div</div>;

3. 在React中使用JSX

React 使用 JSX 来替代常规的 JavaScript,使用JSX来描述UI层,它提供了一种声明式的方式来定义组件的结构。

3.1 创建React元素

在React中,使用JSX创建React元素是一种常见的方式。React元素是构建React应用的基本单位。

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

3.2 在组件中使用JSX

React组件可以通过JSX定义,使得组件的结构更加清晰和易读。

function MyComponent() {
  return (
    <div>
      <h1>Hello, JSX in React!</h1>
      <p>This is a React component using JSX.</p>
    </div>
  );
}

3.3 JSX中使用表达式和条件语句

JSX的强大之处在于可以在其中使用JavaScript表达式和条件语句。

function GreetUser(props) {
  return <p>{props.isLoggedIn ? 'Welcome Back!' : 'Please log in.'}</p>;
}

3.4 JSX中使用事件处理

JSX中可以直接使用事件处理函数。

function ClickButton() {
  const handleClick = () => {
    alert('Button clicked!');
  };


  return <button onClick={handleClick}>Click me</button>;
}

3.5 JSX中使用样式

内联样式可以通过一个JavaScript对象来表示。

const style = {
  color: 'blue',
  fontSize: '16px',
};


function StyledText() {
  return <p style={style}>This text has a blue color and font size of 16px.</p>;
}

3.6JSX中使用循环语句

在JSX中使用循环语句是非常常见的,通常使用JavaScript的 map 函数来遍历数组并生成相应的元素。

import React from 'react';


function ListComponent() {
  const data = ['Item 1', 'Item 2', 'Item 3'];


  return (
    <ul>
      {data.map((item, index) => (
        <li key={index}>{item}</li>
      ))}
    </ul>
  );
}


export default ListComponent;

在上述代码中,我们有一个包含三个元素的数组 data。通过调用 map 函数,我们遍历该数组,并为每个数组元素生成一个 <li> 元素。注意,我们为每个生成的元素设置了一个唯一的 key 属性,以帮助React在更新元素时识别它们。

这个例子中的输出将会是一个包含三个列表项的无序列表:

<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>

如果数据是动态的,例如来自组件的属性或状态,你可以根据需要动态生成JSX元素。以下是一个使用动态数据的例子:

import React, { useState } from 'react';


function DynamicListComponent() {
  const [items, setItems] = useState(['Apple', 'Banana', 'Orange']);


  const addNewItem = () => {
    const newItem = prompt('Enter a new item:');
    setItems([...items, newItem]);
  };


  return (
    <div>
      <ul>
        {items.map((item, index) => (
          <li key={index}>{item}</li>
        ))}
      </ul>
      <button onClick={addNewItem}>Add New Item</button>
    </div>
  );
}


export default DynamicListComponent;

4. JSX的优势和注意事项

4.1 优势

  • 声明式: JSX提供了一种声明式的方式来描述UI,使得代码更加直观和易读。
  • 组合性: 可以轻松地组合多个组件,形成复杂的UI结构。
  • 强大的表达能力: 可以在JSX中嵌入JavaScript表达式,使得动态内容的展示更为方便。

4.2 注意事项

  • JSX转译: JSX需要通过工具(如Babel)转译为普通的JavaScript代码。
  • 类名和样式: 在JSX中,类名要写成 className,内联样式需要使用一个JavaScript对象。
  • 表达式中的注意事项: 在JSX中使用表达式时,确保不包含不安全的内容,以防止XSS攻击。

原文地址:https://mp.weixin.qq.com/s/ZlnBxH_7h8uxBa_Qv59SRw

延伸 · 阅读

精彩推荐
  • React详解React setState数据更新机制

    详解React setState数据更新机制

    这篇文章主要介绍了React setState数据更新机制的相关资料,帮助大家更好的理解和学习使用React框架,感兴趣的朋友可以了解下...

    编程琐事8782022-03-08
  • React一百多行代码实现react拖拽hooks

    一百多行代码实现react拖拽hooks

    这篇文章主要介绍了一百多行代码实现react拖拽hooks,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    孟祥_成都6232022-02-20
  • React浅谈react路由传参的几种方式

    浅谈react路由传参的几种方式

    这篇文章主要介绍了浅谈react路由传参的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    glorydx4712022-02-20
  • React聊一聊我对 React Context 的理解以及应用

    聊一聊我对 React Context 的理解以及应用

    这篇文章主要介绍了聊一聊我对 React Context 的理解以及应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    张国钰6622022-02-24
  • ReactReact实现一个高度自适应的虚拟列表

    React实现一个高度自适应的虚拟列表

    这篇文章主要介绍了React如何实现一个高度自适应的虚拟列表,帮助大家更好的理解和学习使用React,感兴趣的朋友可以了解下...

    抖音前端安全9142022-02-25
  • React采用React编写小程序的Remax框架的编译流程解析(推荐)

    采用React编写小程序的Remax框架的编译流程解析(推荐)

    这篇文章主要介绍了采用React编写小程序的Remax框架的编译流程解析(推荐),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借...

    我的小树林11482022-03-07
  • ReactReact State状态与生命周期的实现方法

    React State状态与生命周期的实现方法

    这篇文章主要介绍了React State状态与生命周期的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考...

    一枚小棋子11122022-02-20
  • ReactReact 19 即将推出的四个全新 Hooks,很实用!

    React 19 即将推出的四个全新 Hooks,很实用!

    React 19 预计将推出 4 个全新 Hooks,这些 Hooks 主要关注 React 中的两个痛点:数据获取和表单。 这些 Hooks 目前在 React 预览版本中作为实验性 API 提供,预计会...

    前端充电宝7042024-01-26