1. JSX的本质

jsx 仅仅只是React.createElement(component,props,…children)函数的语法糖
所有的jsx最终都会被转换成React.createElement的函数调用
createElement需要传递三个参数:

  • 参数1:type
    • 当前ReactElement的类型
    • 如果是标签元素,那么就使用字符串表示“div”
    • 如果是组件元素,那么就直接使用组件的名称
  • 参数2:config
    • 所有jsx中的属性都在config中以对象的属性和值的形式存储
  • 参数3:children
    • 存放在标签中的内容,以children数组的方式进行存储
    • 当然,如果是多个元素呢?React内部有对它们进行处理

2. JSX的基本写法

  1. <script type="text/babel">
  2. const element = (
  3. <div>
  4. <h2>我是标题</h2>
  5. <P>我是内容</P>
  6. </div>
  7. )
  8. // 将jsx元素进行渲染
  9. ReactDOM.render(element, doucment.getElementById("app"))
  10. </srcipt>

3. JSX的babel转换

我们通过React.createElement最终创建出来一个ReactElement对象
这个ReactElement对象是什么作用呢?React为什么要创建它呢?

  • 原因是React利用ReactElement对象组成了一个JavaScript的对象树
  • JavaScript的对象树就是大名鼎鼎的虚拟DOM(Virtual DOM)

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

4. 为什么要使用虚拟DOM

为什么要采用虚拟DOM,而不是直接修改真实的DOM?

  • 很难跟踪状态发生的改变:
  • 操作真实DOM性能降低:

数组循环比较好用的API

  1. // 数组循环新的api
  2. // for...of... 取出数组中的每一项数据
  3. // for...in... 取出数组中的每一项数据的索引值
  4. const todoList = ['吃饭', '睡觉', '打豆豆']
  5. for (let item of todoList) {
  6. console.log("每一项的值", item) // "吃饭" "睡觉" "打豆豆"
  7. }
  8. // for...in... 数组的循环
  9. for (let index in todoList) {
  10. console.log("每一项的索引值", index) // 0 1 2
  11. }