vue的扩展

vue生命周期与钩子函数

生命周期:一个事物从创建到销毁的整个过程就叫生命周期

vue生命周期:一个vue从创建到最终销毁的整个过程。

(1) 为什么要学习vue的生命周期

  • vue是一个框架,内部的很多逻辑都已经处理好了,学习vue的生命周期有利于了解vue如何工作。
  • 学习了vue的生命周期,才能参与到vue的生命周期中。(什么时候发请求)

https://cn.vuejs.org/v2/api/#%E9%80%89%E9%A1%B9-%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E9%92%A9%E5%AD%90

vue2响应式原理与缺点

Object.defineProperty

数据发生了改变,vue会自动更新dom  

//vue2.0使用了es5中的语法,Object.definePropertty语法(数据劫持)
数据劫持   三个对象(对象,属性,对象的描述)
Object.defineProperty(data,'name'{
get(){
comsole.log('当获取name属性的时候,会执行get')
return name
},
set(){
console.log('当设置name属性的时候就会执行set')
name=value
}
})

// ES5的Object.defineProperty语法有缺点
// 1. 性能较差,只能一个属性一个属性劫持
 // 2. 只能对属性一个一个的劫持,那么对象新增的属性就无法生效
 // 3. Object.defineProperty语法 无法劫持数组的下标和长度

缺点与$set

vue3响应式原理介绍

//vue3  采用了es6  proxy代理     VUE3 不兼容ie   vue3对ie11出一个特殊的版本

var data={
name:'zs',
age:18,
gender:'nam'
}
//newData   是data的代理对象
//proxy代理的整个对象
const newData=new Proxy(data,{
get(target,k){
console.log('代理了target的${k}属性')
return target[k]

},
ste(target,k,v){
console.log('代理了target的 ${k}属性的设置为${v}')
target[k]=v

}
})


//不用担心新增的属性,不用担心数组的下标和长度的问题

proxy的使用

mixins的使用

就是混入    用于复用的一些功能
单独新建一个mixins文件夹,hello.js文件
export default {
  // 混入的对象可以包含组件任意的配置
  created() {
    console.log('哈哈哈')
    this.say()
  },
  destroyed() {
    console.log('byebye')
  },
  methods: {
    say() {
      console.log('我说')
    }
  },
  data() {
    return {
      message: '你好啊'
    }
  }
}

别的组件就可以调用
引入:
import   hello  from '@/mixins/hello'
export default{
//vue官网是这样写的
var  Component=vue.extend({
mixins:[hello]
})
//extend看到对于没看   可以省略,就像下面这样写就可以直接写对象
mixins:[hello]//就是混入了hello组件
}

注://
在混入的外面的钩子函数与引入的不会冲突可以共存都能起效
//但如果是函数里面的数据冲突了   组件自己的数据优先级高

watch深度监听

如果要监听复杂类型的数据变化
//就需要深度监听  ,就是watch的完整写
   const vm = new Vue({
      el: '#app',
      data: {
        msg: 'hello',
        car: {
          brand: '小黄车',
          price: 199
        }
      },
      watch:{
      msg(value){
      console.log('msg发生了改变',value)
      }
        // 如果需要监听复杂数据类型,需要使用功能深度监听
        // 需要使用watch的完整写法
        car:{
        //监听需要执行的函数
        handler(value){
         console.log('car变化了', value)
        
        },
        // 深度监听,处理监听地址的变化,还会监听对象内部属性的变化
        deep:true,
        //立即监听
        immediate: true
         }
       }
      })
      
    /* 
      监听简单类型
        watch: {
          msg() {},   msg:{ handler(){} }
        }
      监听复杂类型
        watch: {
          msg: {
            handler(value) {},
            deep: true,
            immediate: true
          }
        }

        
    */   
    



计算属性的get与set

 // 1. 默认情况下,计算属性的值只能获取,不能修改。计算属性是只读的
      // 2. 计算属性只有依赖到的属性发生了改变,计算属性才会自动跟着变
      // 3. 计算属性也有完整写法

   computed: {
        fullName: {
          // 计算属性默认的
          get() {
            return this.firstName + ' ' + this.lastName
          },
          set (value) {
            // this.firstName = value.split(' ')[0]
            // this.lastName = value.split(' ')[1]
            [this.firstName, this.lastName] = value.split(' ')
          }
        }
      }

//set   设置   就可以实现双向的设置

props的类型校验

props: []

props: {}

 // 通用组件的时候,,,组件库
      Vue.component('demo', {
        template: `<div>我是demo组件---我的钱{{money + 100}}</div>`,
        props: {
          money: {
            type: Number,
            // required: true,
            default: 0
          }
        }
      })
      const vm = new Vue({
        el: '#app',
        data: {
          msg: 'hello',
          money: 200,
          money2: 100
        }
      })
 //props  也有对象的用法  也是经常用的
 //type   可以设置其类型

promise

// promise 承诺
      // 作用:用于书写异步代码的新方式
      // es6以前,没有promise使用回调函数,,,,嵌套 回调低于

      // var p = axios()
      // p.then().catch()
      // async function fn() {
      //   try {
      //     const res = await p
      //   } catch {}
      // }
      // react
      // promise的面试题
      // 1.promise的静态方法
      // new Promise() 创建一个promise对象
      new Promise(function(reslove, reject) {
        // 异步代码
        // 成功调用resolve
        // 失败调用reject
      })

      // Promise.resolve(5) 返回一个只会成功的promise
      // new Promise(function (resolve, reject) {
      //   resolve(5)
      // })
      // Promise.resolve(5).then(data => {
      //   console.log(data)
      // })
      // 返回直接失败的promise
      // Promise.reject(10)
      // new Promise(function(resolve, reject) {
      //   reject(10)
      // })
      // Promise.reject(10).catch(err => {
      //   console.log(err)
      // })

      // Promise.all([p1, p2, p3])
      // 参数接受多个promise对象, 返回一个promise对象
      // 只有所有的promise对象都成功,返回的promise才成功,只要有一个失败,返回的promise就失败
      // Promise.all([axios(), axios(), axios()]).then().catch()

      // 竞速
      // 缓存策略
      Promise.race([p1, p2, p3])
      // 返回一个promise对象,,,,这个promise对象的结果只会取决于第一个结束的promise
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值