React查缺补漏 | 青训营笔记

85 阅读1分钟

React实现的三大问题

1、JSX不符合JS语法规范

JSX return的html代码不符合JS的语法
所以我们通过转译

const Test = (props) => {
    const { url } = props;
    return (
        <div className="root">
            <img src={url} />
        </div>
    )
}
"use strict"
const Test = (props) => {
    const { url } = props;
    return /*#__PURE__*/React.createElement("div", {
        className: "root"
    }, /*#__PURE__*/React.createElement("img", {
        src = {url}
    }));
}

2、JSX发生改变时,DOM如何被更新

React提供了另外一个DOM树,叫做虚拟树(VDOM, virtual dom) , 它是基于DOM的另一个抽象层级。它由React应用元素组成。

一个React应用的state发生改变,首先会被应用于VDOM。如果VDOM的新state改变触发了UI的改变,ReactDOM库会通过只更新需要更新的部分来高效的去更新界面。

例如,如果只有一个元素的属性(attribute)发生了改变,React将会通过document.setAttribute(或者其他类似的东西)只更新Html元素的的属性。

当VDOM更新时,React将会比较此时的VDOM和之前的VDOM的快照。如果没有发生变化,真实的DOM不会改变。将新的VDOM与旧的VDOM比较的过程,称之为对比(diffing)