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

JSX代码变成DOM的原理--流程总结描述:

开发者编写JSX代码  --> Babel 编译 --> React.createElement调用 --> ReactElement调用

-->生成‘虚拟DOM’  作为参数传入--->ReactDOM.render() 渲染处理-->真实DOM


JSX代码变成DOM的原理--流程步骤细节描述:

一、JSX是如何映射为DOM的:起步createElement

1、export  function createElement(type,config,children)

type:用于标识节点的类型

config:以对象形式传入,数组所有的属性都会以键值对的形式存储在config对象中

children:以对象形式传入,它记录的是组件标签之间嵌套的内容

2、createElement是一个参数中介:参数数据格式化

入口 React.createElement

二次处理key、ref、self、source四个属性值

遍历 config ,筛选可以提进props里的属性

提取子元素,推入childArray(也即props.children)数组

可视化defaultProps

落脚点 结合以上数据作为入参,发起ReactElement调用

3、JSX语法糖:

React.createElement('ul',{

    className:'list'

},React.createElement('li',{

    key:'1'

},1),React.createElement('li',{

    key:'2'

},'2'));

等价Html

        

  • 1
  •     

  • 2

二、ReactElement(初识虚拟DOM)

组装:把传入的参数按一定的规范组装进element对象里然后return给了React.createElement,然后React.createElement把ReactElement对象返回给了开发者

三、ReactDom.render 渲染处理生成真实DOM渲染到页面中

ReactDom.render(

element,//需要渲染的元素(ReactElement)

container,//元素挂载的目标容器(一个真实DOM)

[callback]//回调函数,可选参数,可以用来处理渲染结束后的逻辑

)

例如: 

    

const rootElement = document.getElementById('root');

ReactDOM.render(,rootElement);


虚拟DOM:核心算法的基石

组件初始化:调用render方法 --> 生成虚拟DOM --> 调用ReactDOM.render方法-->创建真实DOM

组件更新:调用render方法-->生成虚拟DOM --通过diff算法 -->定位出两次虚拟DOM的差异-->对发生变化的真实DOM做定向更新

你可能感兴趣的:(面试语述:JSX代码变成DOM的原理-虚拟DOM)