前言

作为一个前端开发有些不好意思,居然还没有接触过 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 扩展语法相关推荐

  1. 项目解析jsx文件_React系列二十二 云音乐项目实战

    项目地址:https://github.com/coderwhy/hy-react-web-music 如果觉得不错,或者对你有帮助,点一个star~ coderwhy 1.1. 项目简介 使用Rea ...

  2. android bp文件_Android 基础 | Android.bp 语法浅析

    相关推荐: 随着 android 工程越来越大,包含的 module 越来越多,以 makefile 组织的项目编译花费的时间越来越多.Google 在 7.0 引入了 ninja 是 Google ...

  3. react .jsx文件报错<xxx/>is using incorrect casing

    .jsx文件报错:is using incorrect casing 一.问题 二.解决方法及错误原因 三.总结 一.问题 问题描述:使用webpack构建react项目成功后,页面无法正常渲染,浏览 ...

  4. python解析xml数据_数据开发_Python解析XML文件

    解析XML文件 XML是可扩展标记语言,主要用于传输和存储数据 解析方式 使用lxml解析 主要注意: text tag attrib 使用方式 有 get() 以及迭代的情况 数据示例 a31 代码 ...

  5. 项目解析jsx文件_神奇了!这个 Go 语言项目让前端构建快了近 100 倍

    最近,有一个开源项目引起了 Github 上很多人的关注.据悉,开源项目的作者 Evan Wallace 是一个前端爱好者,拥有几个高 Star 数的前端开源项目.作者学了 Go 语言后,觉得可以让前 ...

  6. react入口文件_React项目文件结构解析

    环境搭建好之后的项目结构(搭建环境方法可参照https://my.oschina.net/korabear/blog/1813164),利用VScode编辑器打开: 这个是自动创建的初始结构,下面是各 ...

  7. 浏览器解析jsx_React 初窥:JSX 详解

    题注:阿里巴巴南京研发中心成立一年来业务与团队迅速扩展,诚求前端/后端等各路英才.欢迎关注 [阿里南京技术专刊] (https://zhuanlan.zhihu.com/ali-nanjing),也欢 ...

  8. Java基础系列19:使用JXL或者POI生成和解析Excel文件

    一 简介 如题所示,当我们需要在Java中解析Excel文件时,可以考虑使用JXL或POI的API来解析. 二者的区别如下: jxl现在基本上没被维护了,最近一次更新时间还是几年前.相反,poi属于A ...

  9. webpack 入口文件 php,webpack,jsx_webpack jsx 找不到入口文件,webpack,jsx - phpStudy

    webpack jsx 找不到入口文件 文件目录: ├── README.md ├── components │   ├── plists.jsx │   └── search.jsx ├── ind ...

最新文章

  1. 一张图搞定SDF的概念
  2. SAP Commerce Cloud Storefront 框架选型:Accelerator 还是 Spartacus?
  3. js删除mysql记录_(DELETEUPDATE)修改、删除数据记录_MySQL
  4. 代理缓存服务器squid
  5. vue.js源码学习分享(五)
  6. 读取打印TFRecord格式数据
  7. oracle取第一位,Oracle中的substr()函数和INSTR()函数
  8. 量子时代已来,与时代接轨,从这本书开始
  9. linux 防火墙检查
  10. Creo 6.0软件安装教程|兼容WIN10
  11. 百度文库,道客巴巴等文库免积分下载
  12. 关于ISIS协议TLV TAG标签的研究与简单实验
  13. 【机器学习】注意力机制
  14. 服务器挂微信显示登陆异常怎么办,解决微信提示“该微信账号因登录环境异常,已被限制登录。”的方法...
  15. CPU使用率查看方法
  16. 【英文命名】星座、奢侈品、深海物种相关英语词汇帮助你命名
  17. 完全卸载Android Studio的方法
  18. 六、【中级篇】看门狗(watch dog)
  19. Rufus开源版U盘引导制作工具V3.16
  20. 南京工业大学python期末_南京工业大学燃爆期末复习总结

热门文章

  1. 2014 android 应用开发大赛,2014年全国高校移动互联网应用开发创新大赛
  2. JavaScript 、if else语句判断 、jQurey表单事件
  3. phantomjs debian不显示中文_Python 爬虫:Seleniumamp;PhantomJS 实例(一)
  4. fruncm server sql 无法生成 线程_SQL Server无法生成FRunCM线程的解决方法
  5. 云计算机的优点,介绍云的优点和注意事项
  6. 谈谈你对c语言中数据(各种常量,变量,函数参数,字符串)的存储认识,自考《高级语言程序设计》知识点总结(二)...
  7. onu光功率多少是正常_熔融拉锥型(FBT) VS平面波导型(PLC)光分路器,如何选择?...
  8. html图片加滚动文字,滚动文字、图片等html代码
  9. ImageView、ImageButton、Button三者比较
  10. java pattern split,Java中的Pattern splitAsStream()方法及其示例