# Domcom框架的基本概念和原理
Domcom框架的原理非常简单，一句话就可以说清楚：Domcom部件本身通过其view函数支持以一种js友好的简洁格式（嵌套数组形式）描述React元素，然后利用其React代理部件类ReactProxy在其render方法中将此嵌套数组转换为实际的React元素。如此而已。欲知其详，可以再看看下面对涉及的几个基本概念的进一步解析。

# 基本概念
* **部件**

构成Domcom骨架的最核心概念，是domcom框架用来管理React元素的代理。每个部件都依据一个config对象构造。fonfig对象中只有data和view有特别的作用，最重要的是view成员（可以是实际的view数据，也可以是生成view的函数）。然后通过React部件类ReactProxy生成一个react元素，该React元素挂载时将其中包含的ReactProxy实例指针this提供给Domcom部件的proxy成员字段持有，Domcom利用该实例指针通过update方法管理React元素的Dom更新（通过调用component.proxy.setState方法）和卸妆。

* **ReactProxy**

每个Domcom部件都通过ReactProxy来创建React元素。ReactProxy根据对应Domcom部件的view字段来产生React元素结构。

* **高阶虚拟Dom**

React发明了虚拟Dom的概念和技术，Domcom发扬光大了这一概念和技术。如果说虚拟Dom是以某种js的形式预先声明Dom的层次结构，以便于管理优化。如果我们将原生Dom看作一阶Dom，则React的虚拟Dom可以视作二阶Dom，因为直接用于创建React元素的api非常繁琐、不便于读写。因此出现了jsx这种回归xhtml格式的与js杂交的语法。也可以将jsx视作三阶的高阶虚拟Dom。Domcom所提供的嵌套数组写法不过是另一种三阶虚拟Dom。这种格式的虚拟Dom易于读写，js友好，无需工具链支持，具有很多优点。

以上就已经对Domcom的概念和原理介绍得很清楚完整了。有进一步关心技术细节的同学，完全可以取直接阅读源码。Domcom的源代码非常简单，总计只有七个文件、大约500行代码，比较关键的代码主要在[Component.coffee](https://github.com/taijiweb/domcom/blob/master/src/Component.coffee), [react-proxy.coffee](https://github.com/taijiweb/domcom/blob/master/src/react-proxy.coffee), [dc-util.coffee](https://github.com/taijiweb/domcom/blob/master/src/dc-util.coffee) 这三个文件中，均只有一百多行CoffeeScript，都是非常简明直观的实现，欢迎阅读。