React中的不可变性及JSX简介 (精读React官方文档—02)

简介: React中的不可变性及JSX简介 (精读React官方文档—02)

这是我参与更文挑战的第15天,活动详情查看:更文挑战

为什么不可变性在React中非常重要?

  • 不可变性指的是不直接修改数据,而是使用新的数据替换旧的数据。
  • 不可变性带来的优势:
  1. 撤销和回退操作在开发中是很常见的,不直接在数据上进行修改,可以帮助我们更好的回溯数据。
  2. 更容易跟踪数据的改变。
  3. 方便确定React重新渲染的时机。

通过slice函数返回数组的副本

  • 这个方法是我们必须掌握的。
const arr = [1,2,3,4];
arr.slice()  // [1,2,3,4]
console.log(arr === arr.slice()); //false
复制代码

JSX简介

const element = <h1>Hello, world!</h1>;
复制代码

解读

  • JSX是JavaScript的语法拓展。
  • JSX可以生成React元素。

为什么使用JSX?

官方描述:React 认为渲染逻辑本质上与其他 UI 逻辑内在耦合,React 并没有采用将标记与逻辑进行分离到不同文件这种人为地分离方式,而是通过将二者共同存放在称之为“组件”的松散耦合单元之中,来实现关注点分离。在 JavaScript 代码中将 JSX 和 UI 放在一起时,会在视觉上有辅助作用。它还可以使 React 显示更多有用的错误和警告消息。

解读

  • 我们首先要搞懂一个概念耦合是什么?答:耦合表示两个子系统(或类)之间的关联程度。也就是React认为渲染的逻辑和其他UI逻辑的广联程度比较大,在JS中将JSX和UI放在一起会帮助我们显示更多的错误和警告。

JSX也是一个表达式

  • 可以在if或for语句中使用JSX,并将JSX进行返回,赋值给变量,将JSX当做参数进行出传递,都是可以的。
  • 编译后,JSX表达式会被转换为普通的JavaScript函数调用。

JSX特定属性

  1. 属性值为字面量的情况可以通过引号的形式进行引入。
const element = <div tabIndex="0"></div>;
复制代码
  1. 属性值为JS表达式的时候,需要通过大括号来进行引入。
const element = <img src={user.avatarUrl}></img>;
复制代码

注意事项:

JSX中使用小驼峰命名来对属性进行命名,例如:JSX 里的 class 变成了 className,而 tabindex 则变为 tabIndex。

使用JSX指定子元素

  • 单标签的形式
const element = <img src={user.avatarUrl} />;
复制代码
  • JSX标签中包含很多元素的情形。
const element = (
  <div>
    <h1>Hello!</h1>
    <h2>Good to see you here.</h2>
  </div>
);
复制代码

JSX防止注入攻击

官方描述:React DOM 在渲染所有输入内容之前,默认会进行转义。它可以确保在你的应用中,永远不会注入那些并非自己明确编写的内容。所有的内容在渲染之前都被转换成了字符串。这样可以有效地防止 XSS(cross-site-scripting, 跨站脚本)攻击。

解读React底层已经帮我们做好了,我们可以直接用了。

JSX表示对象

  • Babel不仅有将ES6转为ES5的功能,同时还可以将JSX语法转译为React.createElement()这个函数调用。下面两种代码是等效的。
const element = (
  <h1 className="greeting">
    Hello, world!
  </h1>
);
复制代码
const element = React.createElement(
  'h1',
  {className: 'greeting'},
  'Hello, world!'
);
复制代码
  • React.createElement()实际上创建了这样一个对象。
const element = {
  type: 'h1',
  props: {
    className: 'greeting',
    children: 'Hello, world!'
  }
};
复制代码

解读通俗的说,Babel会将JSX语法转换为JS对象的形式,React 通过读取这些对象,然后使用它们来构建 DOM 以及保持随时更新。


相关文章
|
3月前
|
前端开发 JavaScript
学习react基础(3)_setState、state、jsx、使用ref的几种形式
本文探讨了React中this.setState和this.state的区别,以及React的核心概念,包括核心库的使用、JSX语法、类与函数组件的区别、事件处理和ref的使用。
89 3
学习react基础(3)_setState、state、jsx、使用ref的几种形式
|
4月前
|
XML JavaScript 前端开发
React Jsx语法入门
【8月更文挑战第13天】React Jsx语法入门
47 4
|
1月前
|
JavaScript 前端开发 容器
React零基础入门02--JSX语法基础
React零基础入门02--JSX语法基础
React零基础入门02--JSX语法基础
|
1月前
|
XML 前端开发 JavaScript
react之了解jsx
react之了解jsx
|
2月前
|
XML 前端开发 JavaScript
React JSX
React 使用 JSX(一种类似 XML 的 JavaScript 语法扩展)来替代传统 JavaScript 编写 UI。JSX 使代码更简洁、执行更快且类型安全。例如,`&lt;h1&gt;Hello, world!&lt;/h1&gt;` 实际上是创建一个 React 元素,通过 `ReactDOM.render()` 渲染到 DOM。注意,JSX 中使用 `className` 替代 HTML 的 `class` 属性。
|
1月前
|
存储 前端开发 JavaScript
react之jsx编译原理
react之jsx编译原理
|
2月前
|
XML 前端开发 JavaScript
React JSX
10月更文挑战第7天
16 2
|
4月前
|
前端开发 JavaScript
React的生命周期简介(十)
【8月更文挑战第15天】React的生命周期简介
51 2
React的生命周期简介(十)
|
4月前
|
前端开发 JavaScript 中间件
React脚手架create-react-app简介
【8月更文挑战第13天】React脚手架create-react-app简介
261 4
|
4月前
|
前端开发 JavaScript
React Server Component 使用问题之添加jsx的组件化能力,如何操作
React Server Component 使用问题之添加jsx的组件化能力,如何操作