神族九帝's blog 神族九帝's blog
首页
  • 神卡套餐 (opens new window)
  • 神族九帝 (opens new window)
  • 网盘资源 (opens new window)
  • 今日热点 (opens new window)
  • 在线PS (opens new window)
  • IT工具 (opens new window)
  • FC游戏 (opens new window)
  • 在线壁纸 (opens new window)
  • 面试突击
  • 复习指导
  • HTML
  • CSS
  • JavaScript
  • 设计模式
  • 浏览器
  • 手写系列
  • Vue
  • Webpack
  • Http
  • 前端优化
  • 项目
  • 面试真题
  • 算法
  • 精选文章
  • 八股文
  • 前端工程化
  • 工作笔记
  • 前端基础建设与架构 30 讲
  • vue2源码学习
  • 剖析vuejs内部运行机制
  • TypeScript 入门实战笔记
  • vue3源码学习
  • 2周刷完100道前端优质面试真题
  • 思维导图
  • npm发包
  • 重学node
  • 前端性能优化方法与实战
  • webpack原理与实战
  • webGl
  • 前端优化
  • Web3
  • React
  • 更多
  • 未来要做的事
  • Stirling-PDF
  • ComfyUI
  • 宝塔面板+青龙面板
  • 安卓手机当服务器使用
  • 京东自动评价代码
  • 搭建x-ui免流服务器(已失效)
  • 海外联盟
  • 好玩的docker
  • 收藏夹
  • 更多
GitHub (opens new window)

神族九帝,永不言弃

首页
  • 神卡套餐 (opens new window)
  • 神族九帝 (opens new window)
  • 网盘资源 (opens new window)
  • 今日热点 (opens new window)
  • 在线PS (opens new window)
  • IT工具 (opens new window)
  • FC游戏 (opens new window)
  • 在线壁纸 (opens new window)
  • 面试突击
  • 复习指导
  • HTML
  • CSS
  • JavaScript
  • 设计模式
  • 浏览器
  • 手写系列
  • Vue
  • Webpack
  • Http
  • 前端优化
  • 项目
  • 面试真题
  • 算法
  • 精选文章
  • 八股文
  • 前端工程化
  • 工作笔记
  • 前端基础建设与架构 30 讲
  • vue2源码学习
  • 剖析vuejs内部运行机制
  • TypeScript 入门实战笔记
  • vue3源码学习
  • 2周刷完100道前端优质面试真题
  • 思维导图
  • npm发包
  • 重学node
  • 前端性能优化方法与实战
  • webpack原理与实战
  • webGl
  • 前端优化
  • Web3
  • React
  • 更多
  • 未来要做的事
  • Stirling-PDF
  • ComfyUI
  • 宝塔面板+青龙面板
  • 安卓手机当服务器使用
  • 京东自动评价代码
  • 搭建x-ui免流服务器(已失效)
  • 海外联盟
  • 好玩的docker
  • 收藏夹
  • 更多
GitHub (opens new window)
  • 工作笔记

  • 前端基础建设与架构 30 讲

  • vue2源码学习

    • vue源码系列
    • vue源码面试题
  • 剖析vuejs内部运行机制

  • TypeScript 入门实战笔记

  • vue3源码学习

  • 2周刷完100道前端优质面试真题

  • 思维导图

  • npm发包

  • 重学node

  • 前端性能优化方法与实战

  • webpack原理与实战

  • webGl

  • 前端优化

  • Web3

  • React

  • 更多

  • 笔记
  • vue2源码学习
wu529778790
2021-06-08

vue源码系列

数据劫持-->模板解析-->模板渲染-->数据变化视图自动更新整个流程

20211104233248

  • 手写 Vue2.0 源码(一)-响应式数据原理 (opens new window) 20211103154041

  • 手写 Vue2.0 源码(二)-模板编译原理 (opens new window) 20211103170707

    // src/compiler/index.js
    import { parse } from "./parse";
    import { generate } from "./codegen";
    export function compileToFunctions(template) {
      // 我们需要把html字符串变成render函数
      // 1.把html代码转成ast语法树  ast用来描述代码本身形成树结构 不仅可以描述html 也能描述css以及js语法
      // 很多库都运用到了ast 比如 webpack babel eslint等等
      let ast = parse(template);
      // 2.优化静态节点
      // 这个有兴趣的可以去看源码  不影响核心功能就不实现了
      //   if (options.optimize !== false) {
      //     optimize(ast, options);
      //   }
    
      // 3.通过ast 重新生成代码
      // 我们最后生成的代码需要和render函数一样
      // 类似_c('div',{id:"app"},_c('div',undefined,_v("hello"+_s(name)),_c('span',undefined,_v("world"))))
      // _c代表创建元素 _v代表创建文本 _s代表文Json.stringify--把对象解析成文本
      let code = generate(ast);
      //   使用with语法改变作用域为this  之后调用render函数可以使用call改变this 方便code里面的变量取值
      let renderFn = new Function(`with(this){return ${code}}`);
      return renderFn;
    }
    
  • 手写 Vue2.0 源码(三)-初始渲染原理 (opens new window)

    20211103172427

    // src/lifecycle.js
    export function mountComponent(vm, el) {
      // 上一步模板编译解析生成了render函数
      // 下一步就是执行vm._render()方法 调用生成的render函数 生成虚拟dom
      // 最后使用vm._update()方法把虚拟dom渲染到页面
    
      // 真实的el选项赋值给实例的$el属性 为之后虚拟dom产生的新的dom替换老的dom做铺垫
      vm.$el = el;
      //   _update和._render方法都是挂载在Vue原型的方法  类似_init
      vm._update(vm._render());
    }
    
  • 手写 Vue2.0 源码(四)-渲染更新原理 (opens new window) watcher 是观察者,dep 是被观察者,subs 里面收集 watcher 当数据变动的时候通知自身 subs 所有的 watcher 更新 20211104232805

  • 手写 Vue2.0 源码(五)-异步更新原理 (opens new window) 20211104233834

  • 手写 Vue2.0 源码(六)-diff 算法原理 (opens new window) 20211104234144

  • 手写 Vue2.0 源码(七)-Mixin 混入原理 (opens new window) 20211104234523

  • 手写 Vue2.0 源码(八)-组件原理 (opens new window)

  • 手写 Vue2.0 源码(九)-侦听属性原理 (opens new window)

  • 手写 Vue2.0 源码(十)-计算属性原理 (opens new window)

  • 手写 Vue2.0 源码(十一)-全局 api 原理 (opens new window)

  • 最全的 Vue 面试题+详解答案 (opens new window)

  • 手写 vue-router 源码 (opens new window)

  • 手写 vuex 源码 (opens new window)

  • 手写 vue3.0 源码 (opens new window)

编辑 (opens new window)
上次更新: 2025/03/11, 11:29:39
结束语 再谈项目的基建和架构,个人的价值和方向
vue源码面试题

← 结束语 再谈项目的基建和架构,个人的价值和方向 vue源码面试题→

最近更新
01
Code Review
10-14
02
ComfyUI
10-11
03
vscode插件开发
08-24
更多文章>
Power by vuepress | Copyright © 2015-2025 神族九帝
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×