VUE双向绑定的原理(简单版)+虚拟DOM 节点的创建和更新

您所在的位置:网站首页 vue创建虚拟节点 VUE双向绑定的原理(简单版)+虚拟DOM 节点的创建和更新

VUE双向绑定的原理(简单版)+虚拟DOM 节点的创建和更新

2023-07-22 03:56| 来源: 网络整理| 查看: 265

手动敲敲代码,就很容易理解了,供参考

 

1、以下是VUE双向绑定的原理(简单版)

主要是监听和defineProperty实现简单的双向绑定

 

var obj = { name: '', }; document.getElementById('inputId').addEventListener('keyup', function(event){ console.log('-----event-', event.target.value); obj.name = event.target.value; }); Object.defineProperty(obj, 'name', { get() { console.log('-------get---'); }, set(newVal) { console.log('---------set---', newVal); document.getElementById('inputId').value = newVal; document.getElementById('showId').innerHTML = newVal; } });

 

 

2、以下是虚拟DOM 节点的创建

 

// 生成dom function createDOM(target) { const tag = target.tag || null; const attr = target.attris || {}; const children = target.children || []; if (!tag) { return null; } let node = document.createElement(tag); for (const key in attr) { if (object.hasOwnProperty(key)) { node.setAttribute(key, attr[key]); } } children.forEach(child => { node.appendChild(createDOM(child)); }); return node; };

 

3、以下是更新DOM 节点(简单版,供参考)

// 更新虚拟dom function updateNode(vNode, newVnode) { const children = vNode.children || []; const newChildren = newVnode.children || []; children.forEach((childVNode, index) => { let newChildVNode = newChildren[index] if (childVNode.tag === newChildVNode.tag) { updateNode(childVNode, newChildVNode); } else { replaceNode(childVNode, newChildVNode); } }); }

我不知道要多少个字才可以发布这篇文章,现在发一篇文章怎么这么难咯???唉!我就是想发一篇文章而已,没别的想法,不发广告,我y

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3