Vue3设计思路 -- 实现简单的createApp工厂函数,2024年最新十年Web前端编程开发生涯

上面就是代理的部分,当我们访问this.proxy的某个值的时候,会走入get方法,在get方法中就可以做优先级判断等等操作,如果使用了setupAPI就从setup函数中取值,否则就从传统的optionAPI中的data中取值。设置值也是一样的理解

proxyObject.defineProperty的api风格非常像,但是性能更高,同时也可以做更多的事情,具体红宝书上有详细的描述功能

代码部分

代码不长,但是很值得多看几遍,我也是自己看了一些源码,再跟着老师一起写下来的。收获很大。

function createApp(config) {

let app = {}

app.mount = function (id) {

// 宿主元素

this.rootDOM = document.getElementById(id)

if (!config.render) {

/*

判断传入的配置项是是否有render方法 如果没有就自己通过编译生成render方法

*/

config.render = this.compile(this.rootDOM.innerHTML)

// 将宿主元素的 innerHTML 部分进行编译,主要就是为了处理 像 {{}} @ v-if 等等插值表达式,指定进行编译成浏览器认识的代码

}

if (config.setup) {

this.setupCtx = config.setup()

} else {

this.dataCtx = config.data()

}

/*

封装一个 proxy 对象代理, 相比于Object.defineProperty 性能更高,且可以代理代理至别的对象,有他可以很好的兼容vue2和vue3的api

*/

this.proxy = new Proxy(this, {

get(target, key) {

if (key in target.setupCtx) {

return target.setupCtx[key]

} else {

return target.dataCtx[key]

}

},

set(target, key, value) {

if (key in target.setupCtx) {

target.setupCtx[key] = value

} else {

target.dataCtx[key] = value

}

}

})

/*

这里把这个代理传进入 将来访问代理的某个值 就会进入代理的 get方法

get方法就会去判断是否又 setup api 如果有就用 setup api 没有就用 option api

*/

const el = config.render.call(this.proxy)

this.rootDOM.innerHTML = ‘’

this.rootDOM.appendChild(el)

return this

}

app.compile = function (template) {

/*

这个是个阉割版本的 生成写死的h3标签了

尤大大完整版这里是会根据 template 去解析有什么dom,把DOM中的 {{title}} 替换成用户传入对象的数据的那个title

目前只是为了理解mount的过程 所以就写一个阉割版本,但是这样写下来,已经能够很好的理解和明白 mount 函数的作用和意义了

*/

return function () {

const h3 = document.createElement(‘h3’)

h3.textContent = this.title

return h3

}

}

return app

}

// 使用过程

const app = createApp({

data(){

return {

title:‘haihai’

}

},

/*

vue3 是兼容vue2api的 其实逻辑是通过 proxy 这个ES6 的新 API 来实现的

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

计算机网络

  • HTTP 缓存

  • 你知道 302 状态码是什么嘛?你平时浏览网页的过程中遇到过哪些 302 的场景?

  • HTTP 常用的请求方式,区别和用途?

  • HTTPS 是什么?具体流程

  • 三次握手和四次挥手

  • 你对 TCP 滑动窗口有了解嘛?

  • WebSocket与Ajax的区别

  • 了解 WebSocket 嘛?

  • HTTP 如何实现长连接?在什么时候会超时?

  • TCP 如何保证有效传输及拥塞控制原理。

  • TCP 协议怎么保证可靠的,UDP 为什么不可靠?

算法

  • 链表

  • 字符串

  • 数组问题

  • 二叉树

  • 排序算法

  • 二分查找

  • 动态规划

  • BFS

  • DFS

  • 回溯算法

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

  • 回溯算法

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-4n7QFy49-1712774944559)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值