JSX语法一 - 图1

JSX语法一 - 图2

JSX 是 JavaScript 的一种语法扩展,它和模板语言很接近,但是它充分具备 JavaScript 的能力。

JSX 会被编译为 React.createElement(), React.createElement() 将返回一个叫作“React Element”的 JS 对象。

JSX 的本质是React.createElement这个 JavaScript 调用的语法糖

JSX语法一 - 图3

JSX语法一 - 图4

ReactElement 对象实例,本质上是以 JavaScript 对象形式存在的对 DOM 的描述,也就是老生常谈的“虚拟 DOM”(准确地说,是虚拟 DOM 中的一个节点。

在每一个 React 项目的入口文件中,都少不了对 React.render 函数的调用。下面我简单介绍下 ReactDOM.render 方法的入参规则:

ReactDOM.render(

  1. // 需要渲染的元素(ReactElement)
  2. element,
  3. // 元素挂载的目标容器(一个真实DOM)
  4. container,
  5. // 回调函数,可选参数,可以用来处理渲染结束后的逻辑
  6. [callback]

)

ReactDOM.render 方法可以接收 3 个参数,其中第二个参数就是一个真实的 DOM 节点,这个真实的 DOM 节点充当“容器”的角色

组件在初始化时,会通过调用生命周期中的 render 方法,生成虚拟 DOM,然后再通过调用 ReactDOM.render 方法,实现虚拟 DOM 到真实 DOM 的转换。

当组件更新时,会再次通过调用 render 方法生成新的虚拟 DOM,然后借助 diff定位出两次虚拟 DOM 的差异,从而针对发生变化的真实 DOM 作定向更新。

JSX语法一 - 图5

/** * 01 JSX 可以看做是JS语言的扩展,它既不是一个字符串也不是一个HTML * 02 它具备了 JS 所有的功能,同时还可以被转为 HTML 在界面上进行展示(react react-dom) * * * - 动态显示数据 {} * - 调用方法: 自定义 + 内置 * - 支持表达式, 支持三元表达式 * - 模板字符串 * 注释用{}包裹 */

APP.js

const name= ‘拉勾教育’ const flag = true const obj = { name:‘拉勾教育’, age:100 } function sayHello () { return‘大家好’ } function App() { return ( <div> <p>{name}</p> <p>name</p> <p>{sayHello()}</p> <p>{console.log(‘1111’)}</p> <p>{Math.random()}</p> <p>{flag ? ‘登录的状态’ : ‘执行登录’}</p> <p>{hello, </font><font style="color:#569cd6;">${</font><font style="color:#4fc1ff;">name</font><font style="color:#569cd6;">}</font><font style="color:#ce9178;">}</p> <p>1224{/这里是注释的内容 /}</p> //打印对象需要处理,转换为字符串 <p>{JSON.stringify(obj)}</p> </div> ) } exportdefault App