• vue深入挖掘日记


    在用了vue快一年后,已经有了项目经验的基础上,再回头看vue官网,会发现很多以前遗漏的或者用不到但实际上必须要了解的知识。

    重新学习!!

    深入了解vue原理!!





     q0: vue组件通讯props须知

    props不建议使用数组,
    props:[]
    // 对象 props:{ inpVal:{ type:Number, //传入值限定类型 // type 值可为String,Number,Boolean,Array,Object,Date,Function,Symbol // type 还可以是一个自定义的构造函数,并且通过 instanceof 来进行检查确认 required: true, //是否必传 default:200, //默认值,对象或数组默认值必须从一个工厂函数获取如 default:()=>[] validator:(value) { // 这个值必须匹配下列字符串中的一个 return ['success', 'warning', 'danger'].indexOf(value) !== -1 } } }

    props的值一般无法修改,但如果是基本数据类型的话,还是可以的。可以用计算属性 return一下

    props: {
      title: {
        type: String
      }
    },
    computed: { 
      copyTitle() {
        return this.title
      }
    }

    如果是引用数据类型,props传递的是一个指向,不可以修改。

    props父传子,emit子传父。

     q1:Vue 为什么采用 Virtual DOM 机制?

    虚拟节点对应的就是真实节点
    创建真实节点使用document.createElement和document.createTextNode
    
    可以创建一个真实的节点,然后打印试试
    可知,如果数据每改变一次,都真实的进行整个dom树的重绘和重排,那么性能是很低的。
    (如下图)

    因此,虚拟节点解决了这个问题。
    ——用一个简单的对象去代替复杂的dom对象。
    
    先判断数据是否有改变,如果有改变则更新到真实的dom。

    ——同时,他可以减少浏览器的重绘和回流
    由于本质是一个js对象,具有跨平台功能,

    总结:事实上,有的时候手动优化节点反而比虚拟节点更快速便捷,尤其是在节点比较少的情况下;但是当页面结构比较庞大复杂的时候,虚拟节点更便捷,以及可维护性更高。

    因此,相对来说,虚拟节点在性能和可维护性方面达到了平衡,更具有应用性。

    q2:关于vue的diff算法了解多少?

    了解diff算法,需要知道vue的虚拟节点和真实节点的区别在哪。

    结合上一个问题可以知道,虚拟节点就是数据改变时,会生成一个新的vnode,与旧的oldnode比较,发现有不一样的就直接修改真实的dom

    diff的过程就是调用名为patch的函数,比较新旧节点,一边比较一边给真实的DOM打补丁。

    virtual dom和真实节点的区别,就是将真实的节点关系用对象关系模拟出来。

    1<div>
        <span>test</span>
    </div>
    2var dom1 = {
      tags: 'div',
      children: [{
        tags: 'span',
        value: 'test'
      }]  
    }

    当数据发生改变时,set方法会让调用Dep.notify通知所有订阅者Watcher,订阅者就会调用patch给真实的DOM打补丁,更新相应的视图。

    借鉴博客:https://www.cnblogs.com/wind-lanyan/p/9061684.html

    q3:Virtual DOM 中的列表渲染为什么要用 key?

    为了能更高效的更新virtual dom

    q4:vue中数据响应原理

    ——变化侦测

     如何侦测一个对象的变化,有两种方法

    1、使用object.defineProperty

    2、使用es6的proxy

    关于收集依赖详细解析看这里:https://blog.csdn.net/riona_cheng/article/details/102882160

    q5:使用Vue 这类框架开发的 SPA 为什么会出现页面白屏的问题,又该如何解决

     

    npm run build打包页面空白,有可能是config文件配置路径出错

    assetsPublicPath: '/'改为assetsPublicPath: './'

    在游览器中 / 代表域名的根目录,./代表当前路径

    更多:https://www.cnblogs.com/love314159/articles/9355785.html


    q6:如何让基于 Vue.js 的应用支持 SEO 优化?

    Vue SPA单页面应用对SEO不友好;

    1.SSR服务器渲染;
    2.静态化;

    更多解析详见:https://www.jb51.net/article/164285.htm

    q7:使用 Vue 这类框架实现一个无限滚动的长列表

    常用分页来解决数据量过多的问题,但是有时候不可以用分页。

    解决思路,1、下拉刷新获取新数据,但问题是随着数据逐渐增多,页面节点也越来越多,会变卡顿。

    2、懒加载,只渲染页面可视区域。

    详见:https://juejin.cn/post/6844904008658731022

  • 相关阅读:
    jsp数据交互二
    jsp数据交互(一)
    JQuery操作DOM
    事件和动画
    Jquery选择器
    Optional容器(jdk1.8)
    java常见集合笔记
    字符串内存占用图解
    单例设计模式
    代码块
  • 原文地址:https://www.cnblogs.com/Zhang-jin/p/14167804.html
Copyright © 2020-2023  润新知