【手机同花顺导入公式源码】【snabbdom源码解析】【ctk源码编译】newvue源码学习

时间:2024-11-30 02:25:37 编辑:iapp源码集锦 来源:萝卜4.2源码

1.vue3的学习_介绍他
2.vue2源码——麓一

newvue源码学习

vue3的学习_介绍他

       vue3带来了什么?

       æ€§èƒ½çš„提升

       æ‰“包大小减少%

       åˆæ¸²æŸ“å¿«%,更新渲染%

       å†…存减少%

       æºç çš„提升

       ä½¿ç”¨proxy代替defineProperty实现响应式

       é‡å†™è™šæ‹ŸDOM的实现和Tree-Shaking

       æ‹¥æŠ±TypeScript

       vue3可以更好的支持typescript

       æ–°çš„特性

       æ–°çš„生命周期钩子

       data选项应始终被声明为一个函数

       ç§»é™¤keyCode支持作为v-on的修饰符

       Fragment

       Teleport

       Suspense

       setup配置

       ref和reactive

       watch与watchEffect

       provide与inject

       1.compositionAPI(组合API)

       2.新的内置组件

       3.其他改变

创建vue3工程

       æ–¹æ³•ä¸€ï¼šä½¿ç”¨vue-cli创建

#查看vue-cli版本确保都在4.5.0以上vue?源码--version#安装或升级你的@vue-clinpm?install?-g?@vue/cli#创建vue?create?vue_test#启动cd?vue_testnpm?run?server

       æˆåŠŸ

       æ–¹æ³•äºŒï¼šä½¿ç”¨vite创建

#创建项目npm?init?vite-app?<project-name>#进入工程目录cd?<project-name>#安装依赖npm?install#运行npm?run?devMain.js的不同//?引入的不再是vue构造函数了,引入的是一个名为createApp的工厂函数import?{ ?createApp?}?from?'vue'import?App?from?'./App.vue'//?创建应用实例对象——app(类似于之前Vue2中的vm,但app比vm更轻)//?createApp(App).mount('#app')const?app?=?createApp(App);console.log('@@@',app);app.mount('#app');关闭语法检查vue3组件模板结构可以没有根标签Vue3-dev-tools插件安装1.拉开序幕的setup

       ç†è§£ï¼šVue3.0中一个新的配置项,值为一个函数。

       setup是所有CompositionAPI(组合API)“表演的舞台”。

       ç»„件中所用到的:数据、方法等等,均要配置在setup中。

       setup函数的两种返回值:

       è‹¥è¿”回一个对象,则对象中的属性、方法,在模板中均可以直接使用。(重点关注!)

       è‹¥è¿”回一个渲染函数:则可以自定义渲染内容。(了解)

       æ³¨æ„ç‚¹ï¼š

       Vue2.x配置(data、methos、computed...)中可以访问到setup中的属性、方法。

       ä½†åœ¨setup中不能访问到Vue2.x配置(data、methos、computed...)。

       å¦‚果有重名,setup优先。

       å°½é‡ä¸è¦ä¸ŽVue2.x配置混用

       setup不能是一个async函数,因为返回值不再是return的对象,而是promise,模板看不到return对象中的属性。(后期也可以返回一个Promise实例,但需要Suspense和异步组件的配合)

2.响应式数据

       RefImpl-reference引用implement实现

       ref加工生成的是一个引用实现的实例对象=》引用对象

       æµç¨‹1:

       æµç¨‹2:

       æµç¨‹3:

       å¼•ç”¨å¯¹è±¡åœ¨å¼•ç”¨æ•°æ•°å€¼å’Œå¯¹è±¡æ—¶çš„结构分析

2.1ref函数

       ä½œç”¨:定义一个响应式的数据

       è¯­æ³•:?constxxx=ref(initValue)

       åˆ›å»ºä¸€ä¸ªåŒ…含响应式数据的引用对象(reference对象,简称ref对象)。

       JS中操作数据:?xxx.value

       æ¨¡æ¿ä¸­è¯»å–数据:不需要.value,直接:<div>{ { xxx}}</div>

       å¤‡æ³¨ï¼š

       æŽ¥æ”¶çš„数据可以是:基本类型、也可以是对象类型。

       åŸºæœ¬ç±»åž‹çš„数据:响应式依然是靠Object.defineProperty()的get与set完成的。

       å¯¹è±¡ç±»åž‹çš„数据:内部?“求助”?了Vue3.0中的一个新函数——?reactive函数。

2.2reactive函数

       ä½œç”¨:定义一个对象类型的响应式数据(基本类型不要用它,要用ref函数)

       è¯­æ³•ï¼šconst代理对象=reactive(源对象)接收一个对象(或数组),返回一个代理对象(Proxy的实例对象,简称proxy对象)

       reactive定义的响应式数据是“深层次的”。

       å†…部基于ES6的Proxy实现,通过代理对象操作源对象内部数据进行操作。

4.Vue3.0中的响应式原理vue2.x的响应式

       å®žçŽ°åŽŸç†ï¼š

Object.defineProperty(data,?'count',?{ get?()?{ },?set?()?{ }})

       å¯¹è±¡ç±»åž‹ï¼šé€šè¿‡Object.defineProperty()对属性的读取、修改进行拦截(数据劫持)。

       æ•°ç»„类型:通过重写更新数组的一系列方法来实现拦截。(对数组的变更方法进行了包裹)。

       å­˜åœ¨é—®é¢˜ï¼š

       æ–°å¢žå±žæ€§ã€åˆ é™¤å±žæ€§,界面不会更新。

       ç›´æŽ¥é€šè¿‡ä¸‹æ ‡ä¿®æ”¹æ•°ç»„,界面不会自动更新。

       è§£å†³æ–¹æ³•(添加属性)

       this.$set(obj,key,value);

       importVuefrom'vue'/Vue.set(obj,key,value)

       è§£å†³æ–¹æ³•ï¼ˆåˆ é™¤å±žæ€§ï¼‰

       this.$delete(obj,key)

       importVuefrom'vue'/Vue.delete(obj,key,value)

       è§£å†³æ–¹æ³•ï¼ˆä¿®æ”¹æ•°ç»„)

       this.$set(Arr,index,value)

       this.Arr.splice(index,num)

Vue3.0的响应式

       å®žçŽ°åŽŸç†:

new?Proxy(data,?{ //?拦截读取属性值get?(target,?prop)?{ return?Reflect.get(target,?prop)},//?拦截设置属性值或添加新属性set?(target,?prop,?value)?{ return?Reflect.set(target,?prop,?value)},//?拦截删除属性deleteProperty?(target,?prop)?{ return?Reflect.deleteProperty(target,?prop)}})proxy.name?=?'tom'

       æ¨¡æ‹Ÿvue3中实现响应式使用reflect操作源对象内部的数据

//?模拟vue3中实现响应式const?p?=?new?Proxy(person,{ get(target,propName){ //?有人读取p的某个属性时调用return?Reflect.get(target,propName)},set(target,propName,value){ //?有人改变p的属性时调用return?Reflect.set(target,propName,value);},deleteProperty(target,propName){ //有人删除p的某个属性时调用return?Reflect.deleteProperty(target,propName)}})

       Proxy:/post/

vue2源码——麓一

       探索mini版本手写vue2.x的响应式机制,通过live-server启动html文件,学习直观理解compiler工作流程及发布订阅模式,源码深入分析vue2源码。学习

       在vue2.x中,源码响应式系统是学习手机同花顺导入公式源码其核心,确保数据变更能够即时触发视图更新。源码通过mini版本手写代码,学习我们能更清晰地理解响应式背后的源码机制。

       启动live-server,学习加载编写的源码html文件,动态监控代码运行状态。学习通过可视化工具,源码snabbdom源码解析结合compiler的学习理解图,观察虚拟DOM如何与真实DOM交互,源码体会代码执行流程。

       发布订阅模式在vue中体现为事件系统,事件的发布与订阅机制简化了组件间的通信,实现灵活的ctk源码编译数据流动。分析vue源码,理解事件系统如何在组件间传递消息,强化组件独立性。

       研究new Vue()的实现细节,了解初始化过程、数据绑定、hp保护源码渲染逻辑等关键步骤。对比vue2与vue3的区别,关注新特性与优化点,增进对框架的理解。

       学习vue源码的方法在于深入阅读源码注释、代码结构和实现逻辑。类似bilibili源码了解好代码的标准,例如简洁、易读、可维护性,通过实践提升代码审美的同时,掌握高效的编程技巧。

       系统地规划学习路径,从基础知识开始,逐步深入框架的核心概念和复杂组件。利用在线资源、官方文档、社区讨论等多渠道学习,持续实践并解决问题,构建坚实的技术栈。

       评估代码质量,关注代码规范、性能优化、异常处理等方面。学习如何编写高效、稳定的代码,提升个人编程能力与技术视野。