我们想要实现一个简洁版的Mini-Vue框架,应该包含三个模块:分别是:渲染系统模块、可响应式系统模块、应用程序入库模块。
这篇就来写一下渲染系统模块。剩下两个模块后面有时间再更新。
vue渲染系统实现,应该包含三个功能,分别是:① h函数,用于返回一个VNode对象;② mount函数,用于将VNode转为真实dom,并挂载到DOM上;③ patch函数,类似于diff算法,用于对比两个VNode,决定如何处理新的VNode
虚拟dom本身其实就是个javascript对象。这里会写一些核心逻辑,大家如果看vue源码的话,会发现里面有非常多的边界情况的处理判断。我们只需要知道核心逻辑就可以了,也就是下面所写的。
下面写的会有用到个判断类型的方法,getObjType如下:
也是最准确的判断数据类型的方法
function getObjType(obj) {
let toString = Object.prototype.toString
let map = {
'[object Boolean]': 'boolean',
'[object Number]': 'number',
'[object String]'