项目解析jsx文件_React 基础:JSX 扩展语法
前言
作为一个前端开发有些不好意思,居然还没有接触过 React ,就借这段时间积累下 React 相关经验,为疫情过后能有更多的就业机会。
如果你已经是个经验丰富的 React Developer 可能这系列文章不太适合你阅读。
虽然我承认下面大多数内容,基本都可以在官网找到原型。 但我会努力让你们尽可能不枉此行,如果有不对之处,望各位评论指出。
为了更好的阅读体验,你可以在底下的“了解更多”查看原文(访问我的语雀知识库)。
JSX 介绍
什么是 JSX
如下代码,和 HTML 标签似乎一样,但不是我们认为的 HTML 标签:
就是如此的语法称为 JSX ,它被用来描述 React 中的"元素",从而渲染出我们说要看的页面。
语法糖
虽然 JSX 像是 HTML ,但其是 js 的语法扩展的语法糖。
举例:
如上 JSX 代码,将通过 React.createElement(component, props, ...children) api 解析成如下形式:
注意,上述解析结果就是普通的 js 代码,同时内部对每个子 JSX 标签(children)元素都是嵌套的。
JSX 标签内的属性(key=value) 将被解析成 props 对象,可以清楚的看到 href 、target、alt 等解析结果。
为何使用 JSX
如果使用过 angular2、vue ,你应该知道他们对于 js 和 html 两块内容是分开写的。
angular 物理分割:
vue 通过 loader 组合拆分:
而 React 通过 JSX 语法,将两者耦合在一起。
React 认为渲染逻辑本质上与其他 UI 逻辑内在耦合,比如,在 UI 中需要绑定处理事件、在某些时刻状态发生变化时需要通知到 UI,以及需要在 UI 中展示准备好的数据。
React 并没有采用将标记与逻辑进行分离到不同文件这种人为地分离方式,而是通过将二者共同存放在称之为"组件"的松散耦合单元之中,来实现关注点分离。
最终,我们能更好的理解整个组件里 UI 和逻辑部分的关系。当然这仁者见仁智者见智。
另外,在 JSX 内部会对传入内容进行转义,再进行渲染。所以能防止 XSS 注入攻击。
使用 JSX
括号 { } 表达式
我们可以通过大括号,来显式定义的变量。括号内也支持 js 表达式,或者已定义的方法。
示例:
页面显示:
if 条件判断
由于 {} 括号内部不支持复杂的 js 逻辑判断,如果涉及 if/else 之类语句,可以将 JSX 写在 if/else 里面,因为其本身就是 js 的扩展。
特定属性
或许你应该注意到 HTML 中的 class 属性,在 JSX 中被定义为 className;而 tabindex 变为 tabIndex 。
所以 JSX 和 HTML 是不一样的,尽管他们非常类似。而且 React DOM 中,这些属性使用 camelCase 来命名定义。
JSX 约定
需要包含 React 库
这好理解,因为 JSX 是 React.createElement 的语法糖,所以需要在此之前引入 React ,确保 React 在作用域中。
组件名首字母大写
组件的名称一定要首字母大写,如果小写会导致解析不正确:
把 JsxBase 改为 jsxBase,第一能看到 IDE 的校验已经是"未引用"状态了,然后页面也没有预期渲染出组件内容。
点语法
可以定义一个包含很多 React JSX 的组件,然后一起导出。最后通过指定的引用来选择使用哪个组件。
比如定义了 Foo、Bar 两个组件,然后一同导出:
最后在使用的地方,通过 xxx.xxx 的方式来选择使用那个组件:
不支持动态表达式
注意,JSX 通过 React.createElement 解析,其中的 type 选项不支持动态表达式。
示例:
而是要通过一个中间变量,来引用这个动态表达式。最后返回这个中间变量。
注意,这个中间变量,还是要符合 React JSX 的命名规范,首字母要大写。
其他
props
我们知道 JSX 内的属性最终都会被解析到 props 中,若某个属性没有赋值,那它默认就为 true 。
{autocomplete: true}
另外,我们可以使用 {...xxx} 来定义整个属性:
特殊值的问题
false, null, undefined, and true 是合法的子元素。但它们并不会被渲染:
最终,页面是一片"空白"
另外,对于 falsy 值的渲染,需要长个心眼:
上面红款内容显示在页面上了,并且渲染为 0 。
总结
关于 JSX 的知识点先梳理到这里,基本对一般的使用足够用了。多数都是一些规则的梳理,毕竟这是 React.createElement 的语法糖。
项目解析jsx文件_React 基础:JSX 扩展语法相关推荐
- 项目解析jsx文件_React系列二十二 云音乐项目实战
项目地址:https://github.com/coderwhy/hy-react-web-music 如果觉得不错,或者对你有帮助,点一个star~ coderwhy 1.1. 项目简介 使用Rea ...
- android bp文件_Android 基础 | Android.bp 语法浅析
相关推荐: 随着 android 工程越来越大,包含的 module 越来越多,以 makefile 组织的项目编译花费的时间越来越多.Google 在 7.0 引入了 ninja 是 Google ...
- react .jsx文件报错<xxx/>is using incorrect casing
.jsx文件报错:is using incorrect casing 一.问题 二.解决方法及错误原因 三.总结 一.问题 问题描述:使用webpack构建react项目成功后,页面无法正常渲染,浏览 ...
- python解析xml数据_数据开发_Python解析XML文件
解析XML文件 XML是可扩展标记语言,主要用于传输和存储数据 解析方式 使用lxml解析 主要注意: text tag attrib 使用方式 有 get() 以及迭代的情况 数据示例 a31 代码 ...
- 项目解析jsx文件_神奇了!这个 Go 语言项目让前端构建快了近 100 倍
最近,有一个开源项目引起了 Github 上很多人的关注.据悉,开源项目的作者 Evan Wallace 是一个前端爱好者,拥有几个高 Star 数的前端开源项目.作者学了 Go 语言后,觉得可以让前 ...
- react入口文件_React项目文件结构解析
环境搭建好之后的项目结构(搭建环境方法可参照https://my.oschina.net/korabear/blog/1813164),利用VScode编辑器打开: 这个是自动创建的初始结构,下面是各 ...
- 浏览器解析jsx_React 初窥:JSX 详解
题注:阿里巴巴南京研发中心成立一年来业务与团队迅速扩展,诚求前端/后端等各路英才.欢迎关注 [阿里南京技术专刊] (https://zhuanlan.zhihu.com/ali-nanjing),也欢 ...
- Java基础系列19:使用JXL或者POI生成和解析Excel文件
一 简介 如题所示,当我们需要在Java中解析Excel文件时,可以考虑使用JXL或POI的API来解析. 二者的区别如下: jxl现在基本上没被维护了,最近一次更新时间还是几年前.相反,poi属于A ...
- webpack 入口文件 php,webpack,jsx_webpack jsx 找不到入口文件,webpack,jsx - phpStudy
webpack jsx 找不到入口文件 文件目录: ├── README.md ├── components │ ├── plists.jsx │ └── search.jsx ├── ind ...
最新文章
- 一张图搞定SDF的概念
- SAP Commerce Cloud Storefront 框架选型:Accelerator 还是 Spartacus?
- js删除mysql记录_(DELETEUPDATE)修改、删除数据记录_MySQL
- 代理缓存服务器squid
- vue.js源码学习分享(五)
- 读取打印TFRecord格式数据
- oracle取第一位,Oracle中的substr()函数和INSTR()函数
- 量子时代已来,与时代接轨,从这本书开始
- linux 防火墙检查
- Creo 6.0软件安装教程|兼容WIN10
- 百度文库,道客巴巴等文库免积分下载
- 关于ISIS协议TLV TAG标签的研究与简单实验
- 【机器学习】注意力机制
- 服务器挂微信显示登陆异常怎么办,解决微信提示“该微信账号因登录环境异常,已被限制登录。”的方法...
- CPU使用率查看方法
- 【英文命名】星座、奢侈品、深海物种相关英语词汇帮助你命名
- 完全卸载Android Studio的方法
- 六、【中级篇】看门狗(watch dog)
- Rufus开源版U盘引导制作工具V3.16
- 南京工业大学python期末_南京工业大学燃爆期末复习总结
热门文章
- 2014 android 应用开发大赛,2014年全国高校移动互联网应用开发创新大赛
- JavaScript 、if else语句判断 、jQurey表单事件
- phantomjs debian不显示中文_Python 爬虫:Seleniumamp;PhantomJS 实例(一)
- fruncm server sql 无法生成 线程_SQL Server无法生成FRunCM线程的解决方法
- 云计算机的优点,介绍云的优点和注意事项
- 谈谈你对c语言中数据(各种常量,变量,函数参数,字符串)的存储认识,自考《高级语言程序设计》知识点总结(二)...
- onu光功率多少是正常_熔融拉锥型(FBT) VS平面波导型(PLC)光分路器,如何选择?...
- html图片加滚动文字,滚动文字、图片等html代码
- ImageView、ImageButton、Button三者比较
- java pattern split,Java中的Pattern splitAsStream()方法及其示例