ReactJS实战之JSX详解

本文详细介绍了JSX语法、在React中的应用、如何避免XSS攻击,以及jsx对象的使用和条件渲染技巧。特别强调了Babel在将JSX转换为JavaScript中的角色和React元素的概念。
摘要由CSDN通过智能技术生成

function formatName(user) {

return user.firstName + ’ ’ + user.lastName;

}

const user = {

firstName: ‘Harper’,

lastName: ‘Perez’

};

const element = (

Hello, {formatName(user)}!

);

ReactDOM.render(

element,

document.getElementById(‘root’)

);

书写 JSX 的时候一般都会带上换行和缩进,这样可以增强代码的可读性

同样推荐在 JSX 代码的外面扩上一个小括号,这样可以防止 分号自动插入 的 bug

JSX 本身其实也是一种表达式


在编译后,JSX 其实会被转化为普通的 JavaScript 对象

这意味着,你其实可以在 if 或者 for 语句里使用 JSX,将它赋值给变量,当作参数传入,作为返回值都可以

function getGreeting(user) {

if (user) {

return

Hello, {formatName(user)}!

;

}

return

Hello, Stranger.

;

}

JSX 属性

=====================================================================

“” 定义以字符串为值的属性


const element =

;

{} 定义 js 表达式为值的属性


const element = ;

切记你使用了{}包裹的 js 表达式时就不要再到外面套引号了。

JSX 会将引号当中的内容识别为字符串而非表达式

字符串数组

// 普通字符串数组渲染成js

const arr = [‘1’, ‘2’, ‘3’, ‘4’];

方式一:

// 定义一个空数组

const nameArr = [];

arr.forEach(item=> {

const temp =

{item}
;

nameArr.push(temp);

})

方式二:

{arr.map(item =>

{item}

)}

key 的处理

React 中需要把 key 添加给 forEach 或 map 或 for 循环直接控制的元素

arr.forEach(item=> {

const temp =

{item}
;

nameArr.push(temp);

})

return (

{arr.map(item =>

{item}

)}

);

JSX 嵌套

=====================================================================

若 JSX 标签是闭合式的,需在结尾处用/>, 就好像 XML/HTML 一样

JSX 标签同样可以相互嵌套

警告:

因为 JSX 的特性更接近 JavaScript 而不是 HTML , 所以 React DOM 使用 camelCase 小驼峰命名 来定义属性的名称,而不是使用 HTML 的属性名称

class 变成了 className

tabindex 则对应着 tabIndex

JSX 防注入攻击

========================================================================

可放心在 JSX 当中使用用户输入

React DOM 在渲染之前默认会 过滤 所有传入的值

它可以确保你的应用不会被注入攻击。所有的内容在渲染之前都被转换成了字符串。这样可以有效地防止 XSS(跨站脚本) 攻击

JSX 代表 Objects

=============================================================================

Babel 转译器会把 JSX 转换成一个名为 React.createElement()的方法调用

下面两种代码的作用是完全相同的

React.createElement()首先会进行一些避免bug的检查,之后会返回一个类似下面例子的对象

这样的对象被称为 “React 元素”。它代表所有你在屏幕上看到的东西。React 通过读取这些对象来构建 DOM 并保持数据内容一致。

JSX 的怪异之处

========================================================================

单一根节点


React 组件只能渲染一个根节点。为啥呢?先来看看render函数的一个返回示例:

return(

Hello World

)

它会被转换成一条语句:

return React.createElement("h1",null,"Hello World");

但面的代码却不是合法的:

return (

Hello World

Have a nice day

)

这并非JSX 的限制,而是JavaScript 的一个特性:一条返回语句只能返回单个值,而我们尝试返回两条语句(两次React.createElement 调用)。

解决的方法非常简单:就像你在普通JavaScript 中会做的那样,将所有返回值包含到一个根对象

return (

Hello World

Have a nice day

)

它完全有效,因为它会被转换成:

return React.createElement(“div”,null,

React.createElement(“h1”,null,“Hello World”),

React.createElement(“h2”,null," Have a nice day"),

)

它返回单个值,并且是通过合法的JavaScript 完成的。

  • 条件语句

如果语句不兼容于JSX,看上去像是JSX 的限制所致,实际上却是因为JSX 只是普通的JavaScript

回顾一下JSX 是如何被转换为普通JavaScript

如下JSX

return (

Hello JSX

)

会被转换成这样的JavaScript

return (

React.createElement(“div”,{className:“salutation”},“Hello JSX”);

)

然而,如果尝试在JSX 的中间编写if 语句,例如:

<div className={if (condition) { "salutation" }}>Hello JSX</div>

它就会被转换成一个非法的JavaScript 表达式,如图2-1 所示:

image

  • 有什么解决方法?

尽管并无可能在JSX 中使用“if”语句,但仍有根据条件渲染内容的方法,包括使用三元表达式和将条件赋值给一个变量(空值和未定义的值都会被React 进行处理,JSX在转义时什么都不会输出)。

使用三元表达式

如果你有一个非常简单的表达式,可以使用三元形式:

render() {

return (

Hello JSX

)

}

这段代码会被转换成一段合法的JavaScript:

React.createElement(“div”,{className: condition ?“salutation” : “”},

“Hello JSX”);

三元形式还可用来有条件地渲染整个节点:

{condition ?

Hello JSX
null}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。

如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

每年转战互联网行业的人很多,说白了也是冲着高薪去的,不管你是即将步入这个行业还是想转行,学习是必不可少的。作为一个Java开发,学习成了日常生活的一部分,不学习你就会被这个行业淘汰,这也是这个行业残酷的现实。

如果你对Java感兴趣,想要转行改变自己,那就要趁着机遇行动起来。或许,这份限量版的Java零基础宝典能够对你有所帮助。

[外链图片转存中…(img-b7rfMmRT-1713274062755)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值