React入门-JSX

1. JSX到底是什么

React中,使用JSX定义组件结构,JSX看起来和HTML并没有什么区别,但是React做了很多预处理,使得JSX方便易用。本质上来说 ,JSX是React.createElement方法的语法糖。在编译阶段会被Babel等编译工具转换为一段React.createElement方法生成的虚拟DOM对象。 jsx:

ini 复制代码
const element = <h1 className="title">Hello, React!</h1>;

虚拟DOM:

arduino 复制代码
const element = React.createElement(
  'h1',                // 标签名/组件
  { className: 'title' },  // 属性(props)
  'Hello, React!'      // 子元素
);

2. JSX的作用

JSX使得React中的DOM编写方式更加灵活易用。

  • JSX直接与UI关联,可以清晰看到html结构,所见即所得;
  • 在JSX中允许嵌入JS表达式,实现UI与JS的紧密结合;
  • JSX考虑了安全需求,嵌入的内容会被转为纯文本,不会被执行,防止XSS攻击。若需显示 HTML(谨慎使用):需通过 dangerouslySetInnerHTML 属性,明确告知 React 这是可信内容。
  • JSX支持组件化,在JSX中,支持直接插入组件,实现UI的模块化拆分。

3.如何使用JSX

3.1 JSX与HTML的差异

  • 标签必须闭合:所有标签(包括自闭合标签)必须显式闭合,例如 <img /> 而非 <img>,<input /> 而非 <input>。
  • 属性名驼峰:HTML 中的属性名在 JSX 中需改为驼峰式命名,比如className, onClick, onChange。
  • 内联样式写法不同:内联样式需通过对象定义,属性名用驼峰式,值为字符串(数值单位可省略),例如: <div style={{ color: 'red', fontSize: '16px', marginTop: 20 }}></div>。

3.2 {} 表达式嵌入规则

  • 嵌入表达式可放入变量、函数调用、三元运算等。
  • 不能放语句(如 if、for)。
  • 注释写法:需放在 {} 中,格式为 {/* 注释内容 */}

3.3 组件要求

  • 多个同级元素必须被一个父容器包裹,这点与Vue的template要求一致。可以使用<>,不会额外生成DOM节点。
  • 自定义组件首字母必须大写。
  • 组件使用props传递属性。
ini 复制代码
<UserCard name="Alice" age={25} isActive={true} />
  • 条件渲染:常用三元运算符或逻辑与(&&),避免使用 if-else(可将逻辑提取到函数中)。
javascript 复制代码
// 三元运算
{isLoggedIn ? <LogoutButton /> : <LoginButton />}

// 逻辑与(条件为真时渲染后面的内容)
{hasUnreadMessages && <span>新消息</span>}
  • 列表渲染:需为每个项添加唯一 key 属性,且 key 需在兄弟节点中唯一。提高组件更新性能。
javascript 复制代码
const items = [1, 2, 3];
// 正确(带 key)
{items.map(item => (
  <li key={item}>{item}</li>
))}

// 错误(无 key,会导致性能问题或渲染异常)
{items.map(item => (
  <li>{item}</li>
))}

总结:JSX 是 React 为开发者提供的 "UI 描述语言",让开发人员可以更专注地开发html结构和js逻辑,同时兼顾了安全性考虑和性能优化。

相关推荐
小天源8 小时前
智叟云集系统架构解析:从品牌 AI 可见度监测到前后端协同
人工智能·react.js·系统架构·node.js·react·ai监测·ai品牌监测
donk131411 小时前
React Native for OpenHarmony 实战:三方库 react-native-step-indicator 的鸿蒙化适配指南
分布式·react native·react.js·wpf·harmonyos
donk131413 小时前
React Native for OpenHarmony 实战:三方库 react-native-segmented-control-tab 的鸿蒙化适配指南
javascript·react native·react.js·华为·harmonyos
donk131416 小时前
React Native for OpenHarmony 实战:三方库 react-native-toast-message 的鸿蒙化适配指南
react native·react.js·音视频·harmonyos
看浪的路人1 天前
第2讲:ReAct 模式从零实现——不用框架,手写一个 Agent 内核
前端·react.js·前端框架
一木 之林2 天前
LangChain 第6章 Agent 智能体核心:create_agent 统一入口与 ReAct 循环
前端·react.js·langchain
霸道流氓气质2 天前
在线 AI 绘图平台:Flux 模型集成、Serverless 弹性部署与 ComfyUI 工作流的 React + Spring AI 全栈实战
人工智能·react.js·serverless
Java后端的Ai之路2 天前
08_React组件API
前端·react.js·前端框架
Misnearch3 天前
React中的回调
前端·javascript·react.js
Java后端的Ai之路3 天前
09-React组件生命周期
前端·react.js·前端框架