虚拟 DOM 的样貌
Vue
const vNode = {tag: "div", // 标签名 or 组件名data: {class: "red", // 标签上的属性on: {click: () => {} // 事件}},children: [ // 子元素们{ tag: "span", ... },{ tag: "span", ... }],...}
React
const vNode = {key: null,props: {children: [ // 子元素们{ type: 'span', ... },{ type: 'span', ... }],className: "red" // 标签上的属性onClick: () => {} // 事件},ref: null,type: "div", // 标签名 or 组件名...}
创建虚拟 DOM
Vue(只能在 render 函数里得到 h)
h('div', {class: 'red',on: {click: () => { }},}, [h('span',{},'span1'), h('span', {}, 'span2'])
React.createElement
createElement('div',{className:'red',onClick:()=> {}},[createElement('span', {}, 'span1'),createElement('span', {}, 'span2')])
用 JSX 简化创建虚拟 DOM
React JSX
<div className="red" onClick="{()=> {}}"><span>span1</span><span>span2</span></div>
-
Vue Template
<div class="red" @click="fn"><span>span1</span><span>span2</span></div>
[x] 通过
vue-loader转为h形式
那么这样写的缺点是什么:需要添加额外的构件过程(babel、vue-loader)
