# 实现一个简单的 React

1、 什么是虚拟 dom? 就是具有固定格式的 js 对象

const obj = {
  tag: "div",
  attrs: {
    className: "test"
  },
  children: [
    tag: "p",
    attrs: {
    className: "text"
    },
    tag: "span",
    attrs: {
    className: "txt"
    }
   ]
}

2、 怎么生成虚拟dom对象?

  • 生成抽象语法树(AST)
  • 对应的处理
  • 输出浏览器可是别的js对象

其中Bable会做以下工作

class App extends React.Component{
    render(){
        return <div>123</div>
    }
}

将上面的代码转化成下面的代码

...
_createClass(App,[{
    key:'render',
    value:function render(){
       return React.createElement('div',null,'123')
    }
}])

最核心的一段jsx代码, return

123
被转换成了:return React.createElement("div", null, "123");

我们写的jsx语法,都会转化成React.createElement这种形式