Vue(zf6-1)

一、概述

1.轻量级
2.易学易用
3.灵活且高效

Vue2
1.@vue/cli
2.vue2
3.vuex3
4.vue-router3
5.ElementUI、Antd of Vue 1
6.vant2

Vue3:
1.@vue/cli
2.vue3
3.vuex4
4.vue-router4
5.ElementPlus、Antd of Vue3
6.vant3

基础知识扎实、核心原理清楚、综合实战多练

传统基于JS开发项目:直接操作DOM(获取需要操作的DOM元素、对DOM进行操作)

vue:放弃直接操作DOM,转而去操作数据

基于computed创建计算属性(依赖于某些值计算出新的值)

在vue中如何指定视图
1.基于el配置项指定
2.基于template配置项指定
3.基于vm.$mount指定
4.基于render配置项指定(基于JSX语法构建视图)

在data中构建的数据会直接挂载到实例上
所有在实例上挂载的属性都可以直接在视图中使用

在data编写的数据是经过数据劫持的,它是响应式的数据,修改数据值视图会自动更新,直接给实例设置的键值对,如vm.xxx = yyy,不是响应式的

set劫持:当我们修改数据值的时候,会触发其set函数执行,在函数中不仅修改了数据,而且还会通知视图重新渲染

小胡子语法中嵌入的是JS表达式
原始值
1.null/undefined渲染为空
2.Symbol类型的值,不能直接写Symbol()函数,但是可以把其赋值给一个状态进行渲染
3.剩下的情况都转换为字符串:String(value)
对象类型值
1.普通对象/数组对象,基于JSON.stringify()变为JSON字符串进行渲染
2.其余的对象,基于String(value)变为字符串渲染

二、Object.defineProperty

Object.getOwnPropertyDescriptor(obj, prop):查看对象某个私有成员的描述
1.configurable:是否可删除
2.enumerable:是否可枚举(可枚举:可以被for...in循环或Object.keys迭代到的属性)
3.writable:是否可修改
4.value:成员的值

const obj = {
    name: 'osoLife',
    age: 35
}
// 基于常规手段给对象设置的成员其规则一般都是:可删除、可枚举、可修改
console.log(Object.getOwnPropertyDescriptor(obj, 'name'))
// configurable: true
// enumerable: true
// value: "osoLife"
// writable: true

console.log(Object.getOwnPropertyDescriptor(obj, 'toString')) // undefined
// 浏览器内置的属性其规则一般都是:可删除、可修改,不可枚举
console.log(Object.getOwnPropertyDescriptor(Object.prototype, 'toString'))

Object.getOwnPropertyDescriptors(obj):查看对象所有私有成员的规则描述
console.log(Object.getOwnPropertyDescriptors(Object.prototype))

Object.defineProperty(obj, prop, descriptor)

const obj = {
    x: 100
}
// 如果成员存在,则为成员修改规则
Object.defineProperty(obj, 'x', {
    configurable: false,
    enumerable: false,
    writable: false,
    value: 200
})
// 如果成员不存在,则为新增成员并设置规则
Object.defineProperty(obj, 'y', {
    value: 300
})
console.log(Object.getOwnPropertyDescriptors(obj))

关于规则的默认值
1.成员之前不存在,我们新增一个成员,则规则的默认值都是false
2.成员之前存在,我们打算修改规则,没有改之前,成员之前的规则是啥还是啥

const define = (obj, key, value) => {
    Object.defineProperty(obj, key, {
        configurable: true,
        writable: true,
        enumerable: false,
        value
    })
}
define(Object.prototype, 'unique', function () { })

const obj = {
    x: 1,
    y: 2
}
const proxy = {...obj} 
// 数据劫持(一旦被劫持之后,和规则中的value & writeable属性相互冲突)
Object.defineProperty(obj, 'x', {
    get() { // 当访问x的时候会触发get函数,函数的返回值就是成员访问的结果
        return proxy.x
    },
    set(val) { // 当设置x的时候会触发set函数
        proxy.x = val
    }
})

Object.freeze(obj):冻结一个对象(不能新增成员;现有成员:不能删、不能改,成员的枚举属性是不变的)

Object.isFrozen(obj):验证是否为冻结的

Vue内部会基于递归的方式,对data中的数据进行深度的监听和劫持,只处理对象(普通对象)和数组

如果对象被冻结了,那么其内部的每一个成员将不再进行属性劫持

对于对象,vue会依次迭代其内部可枚举、非Symbol类型的私有属性,因为其内部是基于Object.keys来获取对象的属性,对每一个属性进行get/set劫持

对于属性名是Symbol类型的属性,不会进行任何的处理,包括不挂载到实例上

vm.$set([object], [key], [value]):不能基于$set给vm实例对象设置属性,对象新增成员的同时给成员进行了get/set劫持,让其成为响应式数据

vm.$forceUpdate():强制视图更新

三、SPA和MPA的区别

SPA
1.组成结构:一个主页面+许多组件
2.地址模式:www.xxx.com/#/login、www.xxx.com/#/home
3.跳转方式:主页面不刷新,只是组件之间的切换,一个组件渲染/显示,一个组件销毁/隐藏
4.内容更新:只是相关组件的切换,即局部更新
5.公共资源:公共资源只需要加载一次
6.数据传递:方式很多(本地存储、全局变量、组件通信)
7.开发成本:需要基于特定的框架开发,维护起来非常方便
8.搜索引擎:不利于SEO优化
9.适用场景:目前主流模式,对体验度和流畅度要求较高的应用,例如:移动端开发、PC端管理系统

MPA
1.组成结构:许多完整的页面
2.地址模式:www.xxx.com/login.html、www.xxx.com/index.html
3.跳转方式:从一个页面跳转到另外一个页面
4.内容更新:整体HTML页面的切换,即全局刷新
5.公共资源:公共资源需要重新加载
6.数据传递:方法有限(可基于本地存储、URL问号传参)
7.开发成本:直接开发即可,但后期维护很麻烦
8.搜索引擎:可以直接做SEO优化
9.适用场景:非主流模式,适用于对SEO要求较高的应用,例如:传统PC官网

@珠(zxt22)[24]【b-bhcv】
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容

  • 1、$nextTick (1)原理说法一:Vue在更新DOM时是异步执行的。只要监听到数据变化,vue就会开启一个...
    混水妹妹阅读 1,023评论 0 0
  • ## vue的基本原理 当一个Vue实例创建时,Vue会遍历data中的属性,用 Object.definePro...
    稚沅阅读 157评论 0 0
  • 前端常见的一些问题 1.前端性能优化手段? 1. 尽可能使用雪碧图2. 使用字体图标代替图片3. 对HTML,cs...
    十八人言阅读 1,122评论 0 1
  • 注:读本文前已经默认您已经掌握JavaScript、css、html 等相关知识。 1. 什么是VUE.js? V...
    我方程序员阅读 266评论 0 0
  • 1.vue优点?答:轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十kb;简单易学:国人开发,中文...
    高磊_IT阅读 1,417评论 0 1