Vue2源码核心考点总结

170 阅读1分钟

组件渲染和更新过程?

初次渲染

  • template 编译成 render (通常webpack会使用vue-loader 在打包的时候把这一步做了)
  • 触发数据响应式
  • 执行render函数 生成vnode
  • path(elemnt, vnode) 渲染dom

组件更新

  • 修改data 触发 更新
  • re render 重新执行render
  • patch(oldVnode, newVnode) 进行比对, 更新需要修改的dom

vue如何监听到data触发需要更新视图?

  • 监听数据变化
  • 初次渲染时执行render会触发getter, vue会进行依赖收集
  • 修改data时, 触发过getter的date数据才会被触发视图更新, 因为其他没有触发getter的说明没被render函数使用到, 和视图无关所有无需更新

diff算法

  • 同级比对
  • tag 不相同认为不是同一个节点
  • 判断key和tag相同就认为相同节点

前端路由hash和history分别是怎么监听的

hash

  • location.hash
  • window.onhashchange 监听变更

history

  • history.pushState 跳转
  • window.onpopstate 监听前进后退