React | React的JSX语法(二)

简介: React | React的JSX语法(二)

四、JSX的条件渲染

React条件渲染

  • 某些情况下,界面的内容会根据不同情况显示不同内容,或决定是否渲染其部分内容
  • Vue中,会通过指令控制 v-if v-show
  • React中,所有的条件判断都和JavaScript代码一致


  • 常见的条件渲染方式有哪些?


  • 条件判断语句
  • 适合逻辑较多的情况


  • 三元运算符
  • 适合逻辑简单的情况


  • 与运算符&&
  • 适合条件成立,渲染某一组件,不成立,什么也不渲染


  • v-show效果
  • 主要控制display属性是否为none

9dc4132112424682a0fd4e9d72967123.png

五、JSX的列表渲染

React列表渲染

  • 在真实开发中,我们会从服务器请求到大量数据,数据以列表的形式存储
  • 如 歌曲 歌手 排行榜列表数据
  • 如 商品 购物车 评论列表数据
  • 如 消息 动态 联系人列表数据


  • 在React中并没有像Vue模板中的v-for指令,我们需要通过JavaScript代码的方式组织数据,转成JSX
  • 很多从Vue转到React的人非常不习惯,认为Vue更加的简洁
  • 但是React中的JSX正是因为和JavaScript无缝衔接,让它可以更加灵活
  • 另外React是真正可以提高我们编写代码能力的一种方式


  • 那么在React中如何展示列表呢?
  • 在React中,展示列表最多的方式是使用数组的map高阶函数


  • 很多时候我们在展示一个数组中的数据前,需要对它进行一些处理
  • 如 过滤掉一些内容: filter函数
  • 如 截取数组中一部分: slice函数

列表中的key

  • 我们发现在前面的代码中,都会报一个警告:

8362f611cd1c4809bf7758486f3499a8.png

  • 这个警告是告诉我们需要在列表展示的jsx中添加一个key
  • key主要的作用是为了提高diff算法时的效率

六、JSX的原理和本质

JSX的本质

  • 实际上,jsx仅只是React.createElement(component,props,...children)函数的语法糖
  • 所有的jsx最终都会被转换成React.createElement的函数调用


  • createElement需要传递三个参数:
  • 参数一:type
  • 当前ReactElement的类型
  • 如果是标签元素,那么就使用字符串表示"div"
  • 如果是组件元素,那么就直接使用组件的名称;


  • 参数二:config
  • 所有jsx中的属性都在config中以对象的属性和值的性质存储
  • 如 传入className作为元素的class


  • 参数三:children
  • 存放在标签中的内容,以children数组的方式进行存储
  • 如果是多个元素怎么办呢? React内部有对它进行处理


虚拟DOM的创建过程

  • 我们通过React.createElement创建出来一个ReactElement对象:

1ff143b71b974d18ab0671a2ac02c460.png

  • 这个ReactElement对象有什么作用呢?为什么要创建他呢?
  • React利用ReactElement对象组成了一个JavaScript的对象树
  • JavaScript的对象树就是 虚拟DOM(Virtual DOM)


  • 如何查看ReactElement的树结构呢?
  • 可以将之前的jsx返回的结果进行打印


  • 而ReactElement最终形成的树结构就是Virtual DOM

jsx -> 虚拟DOM -> 真实DOM

jsx代码 -> ReactElement对象 -> 真实DOM

声明式编程

  • 虚拟DOM帮助我们从命令式编程转到了声明式编程的模式
  • React官方说:Virtual DOM是一种编程的理念
  • 在这个理念中,UI以一种理想化或者说虚拟化的方式保存在内存中,并且它是一个相对简单的JavaScript对象
  • 我们可以通过ReactDOM.render让 虚拟DOM 和 真实DOM同步起来,这个过程叫做协调(Reconciliation)


  • 这种编程的方式赋予了React声明式的API:
  • 只需要告诉React希望让UI是什么状态
  • React来确保DOM和这些状态是匹配的
  • 你不需要直接进行DOM操作,就可以从手动更改DOM,属性操作,事件处理中解放出来.
相关文章
|
1月前
|
前端开发 JavaScript 开发者
React:JSX语法入门
React:JSX语法入门
28 0
|
5天前
|
XML 前端开发 JavaScript
react中JSX的详解
react中JSX的详解
13 2
|
16天前
|
前端开发 JavaScript 安全
React中的JSX:语法与原理深入解析
【4月更文挑战第25天】本文深入解析React中的JSX,一种JavaScript语法扩展,使代码更直观。JSX让开发者以HTML样式描述组件UI,但最终编译成JavaScript。通过Babel转换,JSX标签转为React.createElement()调用,创建虚拟DOM。JSX的优势在于直观性、类型安全、代码复用和工具支持,助力高效开发React组件,适应不断发展的Web应用需求。
|
2月前
|
XML 前端开发 JavaScript
【前端】深入了解React JSX语法及实例应用
【前端】深入了解React JSX语法及实例应用
16 0
|
3月前
|
前端开发 JavaScript 安全
react为什么要使用JSX
react为什么要使用JSX
24 1
|
4月前
|
XML JavaScript 前端开发
说说React jsx转换成真实DOM的过程?
说说React jsx转换成真实DOM的过程
19 0
|
18天前
|
前端开发 测试技术 开发工具
探索前端框架React Hooks的优势与应用
本文将深入探讨前端框架React Hooks的优势与应用。通过分析React Hooks的特性以及实际应用案例,帮助读者更好地理解和运用这一现代化的前端开发工具。
|
11天前
|
开发框架 Dart 前端开发
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
【4月更文挑战第30天】对比 Flutter(Dart,强类型,Google支持,快速热重载,高性能渲染)与 React Native(JavaScript,庞大生态,热重载,依赖原生渲染),文章讨论了开发语言、生态系统、性能、开发体验、学习曲线、社区支持及项目选择因素。两者各有优势,选择取决于项目需求、团队技能和长期维护考虑。参考文献包括官方文档和性能比较文章。
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
|
10天前
|
前端开发 JavaScript 开发者
【专栏:HTML与CSS前端技术趋势篇】前端框架(React/Vue/Angular)与HTML/CSS的结合使用
【4月更文挑战第30天】前端框架React、Vue和Angular助力UI开发,通过组件化、状态管理和虚拟DOM提升效率。这些框架与HTML/CSS结合,使用模板语法、样式管理及组件化思想。未来趋势包括框架简化、Web组件标准采用和CSS在框架中角色的演变。开发者需紧跟技术发展,掌握新工具,提升开发效能。
|
12天前
|
开发框架 缓存 前端开发