jsx----经过Bebal编译返回可供React.createElement()可调用的对象—React.createElement调用后生成虚拟dom—diff算法—生成新的真实dom
经过babel编译:
import {greet} from ‘./utils’;
const App =
{greet(‘scott’)}
;ReactDOM.render(App, document.getElementById(‘root’));
经过babel编译后,被React.createElement调用:
var _utils = webpack_require(1);
var App = React.createElement(
‘h1’,
null,
(0, _utils.greet)(‘scott’)
);
ReactDOM.render(App, document.getElementById(‘root’));
总之,返回元素属性对象,子节点这样的值。
然后经过React.createElement()调用后生成虚拟dom
虚拟dom包括:
virtual = {
key:‘’, //元素的key
props:‘’, // 子元素
ref:‘’, // 元素的ref属性
type:‘’ //标签名
}
虚拟Dom经过diff算法后传入ReactDom.render函数中,将其转变为真实Dom,利用原生代码不断生成元素。
Diff 算法是:深度优先算法、时间复杂度:O(n)。
大致比对的过程: