根据html原型写vue前端,[Vue官方教程笔记]- 尤雨溪手写mini-vue__Vue.js__前端

本文介绍了如何根据HTML原型构建Vue前端应用,详细讲解了从数据响应模块、编译器到渲染函数的工作流程,并通过一个MVVM原型实现,展示了数据模型与视图的监听。文中涉及MVVM框架的接口定义、程序骨架、编译渲染函数的创建,以及数据响应的实现,最后探讨了视图渲染过程和编译器原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主题列表:juejin, github, smartblue, cyanosis, channing-cyan, fancy, hydrogen, condensed-night-purple, greenwillow, v-green, vue-pro, healer-readable, mk-cute, jzman, geek-black, awesome-green

theme: vue-pro

highlight:

🔥这周我看了看了尤大神亲手写的mini版Vue3,笔记如下请大家指正。

9bc12d147a7ca05bcb43937c12a0bf72.png

⚡️关注公众号【前端大班车】 回复 【mini-vue】索取完整代码

一、整体工作流程

065b384bbfecb584261dc34b22ec5af0.gif

编译器将视图模板编译为渲染函数

数据响应模块将数据对象初始化为响应式数据对象

视图渲染

RenderPhase : 渲染模块使用渲染函数根据初始化数据生成虚拟Dom

MountPhase : 利用虚拟Dom创建视图页面Html

PatchPhase:数据模型一旦变化渲染函数将再次被调用生成新的虚拟Dom,然后做Dom Diff更新视图Html

二、三大模块的分工

6ab7ce649fbe9274e944aa0fd6634036.png

数据响应式模块

编译器

渲染函数

1. 数据响应式模块

提供创建一切数据变化都是可以被监听的响应式对象的方法。

7bafc3ef85e0abeeea0e44459806851d.gif

2. 编译模块

9ab81dfde9e23cf9dd48207d99764bff.png

将html模板编译为渲染函数

这个编译过程可以在一下两个时刻执行

浏览器运行时 (runtime)

Vue项目打包编译时 (compile time)

3. 渲染函数

渲染函数通过以下三个周期将视图渲染到页面上

8013ec5bcaeff89af0bf3afec80cc044.png

Render Phase

Mount Phase

Patch Phase

三、MVVM原型(Mock版)

4221c738f3b3603cf82a0ecb2439c549.gif

MVVM框架其实就是在原先的View和Model之间增加了一个VM层完成以下工作。完成数据与视图的监听。我们这一步先写一个Mock版本。其实就是先针对固定的视图和数据模型实现监听。

1. 接口定义

我们MVVM的框架接口和Vue3一模一样。

初始化需要确定

视图模板

数据模型

模型行为 - 比如我们希望click的时候数据模型的message会会倒序排列。

const App = {

// 视图

template: `

{ {message}}

`,

setup() {

// 数据劫持

const state = new Proxy(

{

message: "Hello Vue 3!!",

},

{

set(target, key, value, receiver) {

const ret = Reflect.set(target, key, value, receiver);

// 触发函数响应

effective();

return ret;

},

}

);

const click = () => {

state.message = state.message.split("").reverse().join("");

};

return { state, click };

},

};

const { createApp } = Vue;

createApp(App).mount("#app");

2. 程序骨架

程序执行过程大概如图:

b6724f96cc443399dcfb79c17854b1d9.gif

const Vue = {

createApp(config) {

// 编译过程

const compile = (template) => (content, dom) => {

};

// 生成渲染函数

const render = compile(config.template);

return {

mount: function (container) {

const dom = document.querySelector(container);

// 实现setup函数

const setupResult = config.setup();

// 数据响应更新视图

effective = () => render(setupResult, dom);

render(setupResult, dom);

},

};

},

};

3. 编译渲染函数

MVVM框架中的渲染函数是会通过视图模板的编译建立的。

// 编译函数

// 输入值为视图模板

const compile = (template) => {

//渲染函数

return (observed, dom) => {

// 渲染过程

}

}

简单的说就是对视图模板进行解析并生成渲染函数。

大概要处理以下三件事

确定哪些值需要根据数据模型渲染

// { {message}}

// 将数据渲染到视图

button = document.createElement('button')

button.innerText = observed.message

dom.appendChild(button)

绑定模型事件

// { {message}}

// 绑定模型事件

button.addEventListener('click', () => {

return config.methods.click.apply(observed)

})

确定哪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值