美文网首页
jsx代码如何变成dom

jsx代码如何变成dom

作者: 林不羁吖 | 来源:发表于2022-11-16 20:30 被阅读0次

一、三个问题考察对jsx的理解

  1. jsx的本质是什么,它和js之间是什么关系?
  2. 为什么要用jsx?不用会有什么后果
  3. jsx背后的功能模块是什么?这个功能模块都做了哪些事情?

二、jsx的本质以及它和js之间是什么关系?

2.1 jsx是什么

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

2.2 和js的关系

因为jsx是JavaScript的拓展,所以直接决定了浏览器不会像天然支持JavaScript一样支持jsx。
但是既然jsx充分具备JavaScript的能力,那么jsx是如何在js中生效的呢?
其实在react官网中就给出了答案,jsx会被编译为React.createElement(),它将返回一个“React Element”的js对象。

编译这个动作是由Babel来完成的。Babel是一个工具链,主要用于将es2015+版本的代码转换为向后兼容的js语法,以便能够运行在当前和旧版本的浏览器或其他环境。

在babel官网中,可以看到编译前后的代码


[图片]

2.3 jsx的本质

当我们在写jsx时,实际上编译后就是React.createElement。
jsx的本质就是调用js中的React.createElement语法糖。

三、为什么要用jsx?不用会有什么后果

既然jsx等价于一次React.createElement调用,那么React官方为什么不直接引导我们用ReactElement来创建元素?

因为当jsx内容更多时,编译之后的代码会变得很复杂,嵌套不清晰

所以jsx语法糖允许我们使用最为熟悉的类HTML标签语法来创建虚拟DOM,降低学习成本的同时,也提升了研发效率和体验。

四、jsx背后的功能模块是什么?这个功能模块都做了哪些事情?

4.1 createElement

1.入参分析

export function createElement(type,config,children)

type:标识节点类型
config:以对象形式传入,组件所有的属性都会以键值对的形式存储在config中
children:以对象形式传入,它记录的是组件标签之间嵌套的内容

2.函数体拆解

[图片] [图片]

createElement的步骤其实是在格式化数据。将开发传入的数据根据ReactElement的预期做一层格式化,最终调用ReactElement实现元素的创建。

4.2 ReactElement

主要做的事情就是组装ReactElement把传入的参数按照一定的规范,组装进Element对象里,然后返回给React.createElement,最后React.createElement交回给开发者手中。

[图片]

可以通过打印验证这一点。输出的确实是标准的ReactElement实例。本质是以js对象形式存在的对dom的描述,也就是虚拟dom。


[图片] [图片]

4.3 虚拟dom和reactDom.render

既然是虚拟dom,那和渲染到页面上的真实dom一定是有差距的,它们之间的差距就是由reactDom.render方法来填补的。
reactDOM.render经常出现在项目的入口文件中。

reactDOM.render的入参分析 [图片]

4.4 总结

jsx背后的功能模块的内容以及做了的事情:
1.通过babel将jsx代码编译为React.createElement的调用。

2.React.createElement将传入的参数包括type,config,children格式化为ReactElement预期的格式。

3.调用ReactElement后组装成ReactElement对象,返回给React.createElement,最终生成虚拟dom。

4.虚拟dom作为ReactDOM.render的入参,经过渲染处理生成真实DOM。


[图片]

相关文章

  • jsx代码如何变成dom

    一、三个问题考察对jsx的理解 jsx的本质是什么,它和js之间是什么关系? 为什么要用jsx?不用会有什么后果 ...

  • 面试语述:JSX代码变成DOM的原理-虚拟DOM

    JSX代码变成DOM的原理--流程总结描述: 开发者编写JSX代码 --> Babel 编译 --> React....

  • reactjs 基础概念

    JSX - 使用 HTML 语法写的代码可以被转为 JS 对象 Virtual DOM - 实际 DOM 的 JS...

  • React(一)JSX是如何变成DOM的

    1.jsx本质,和js的关系? js的语法扩展,和模板语言很接近,充分具备js的能力。是React.createE...

  • 学习笔记之JSX与React

    大写开头的JSX,我们称之为组件虚拟DOM;小写开头的JSX,我们称之为元素虚拟DOM。 大写开头的JSX是因...

  • react-2

    用jsx写的代码,babel会将其转化为react的虚拟dom,如下图: 可以看到,转化后,是用 方法来生成dom...

  • 学习笔记:深入RN知识总结

    一、RN底层实现原理 1.1、 React内部核心:虚拟DOM技术+diff算法。 React框架,将JSX代码渲...

  • React 学习笔记

    React 中的虚拟dom 获取 state 数据 获取 jsx 模板 state + jsx (数据+模板)生成...

  • react中的虚拟dom

    jsx->createElement->虚拟dom(js对象)->真实的dom 生成虚拟dom的时机:setSta...

  • React基础篇之虚拟DOM

    Hello World JS创建虚拟DOM JSX创建虚拟DOM 虚拟DOM与真实DOM 下一篇:React基础篇...

网友评论

      本文标题:jsx代码如何变成dom

      本文链接:https://www.haomeiwen.com/subject/xycuxdtx.html