vue3.0 api

126 阅读3分钟

Vue2: 选项式api

Vue3: 组合式api

Vue2.0和vue3.0响应式原理对比****

1 Vue2.0响应式原理

1.Vue2.0中使用ES5中的Object.defineProperty(数据劫持)方法实现响应式数据(监听数据变化,更新DOM)

  1. 缺点

1.无法监测到对象属性的动态添加和制除

2.无法监测到数组的下标和length属性的变更

3.解决方案

1.Vue2.0提供Vue.set方法用于动态给对象添加属性

$set(‘对象’,‘属性名’,‘值’)

$set(‘数组’,‘角标’,‘值’)

2. Vue2.0提供Vue.delete方法用于动态删除对象的属性

$delete(‘对象’,‘属性名’,)

$delete(‘数组’,‘角标’,)

3. 重写vue中数组的方法,用于监测数组的变更

Vue3.0响应式原理

1.Vue3.0中使用ES6中的proxy语法实现响应式数据

优点

1. 可以检测到代理对象属性的动态添加和删除

2. 可以监测到数组的下标和length属性的变更

缺点

1. ES6的proxy语法对于低版本浏览器不支持,IE11

2. Vue3.0会针对于IE11出一个特殊的版本用于支持ie11

Vue3 composition APl vue2 options api****

Options APl 选项api

  1. Options APl的优点是容易学习和使用,代码有明确的书写位置

  2. Options APl的缺点就是相似逻辑不容易复用,在大项目中尤为明显。

3.Options API可以通过mixins提取相同的逻辑,但是容易发生命名冲突且来源不清晰

Composition AP| 组合API

1. Composition APl是根据逻辑功能来组织代码的,,一个功能所有的api放到一起

2.即便项目很大,功能很多,都能够快速的定位到该功能所有的API

3.Composition APl提供了代码可读性和可维护性

Vue3.0中推荐使用compositionAPl,也保留了options APl.3.

Setup()****

1:Setup函数是一个新的组件选项,作为组件中composition APl的起点

2. 从生命周期钩子的角度来看,setup会在beforeCreate钩子函数之前执行

3. Setup中不能使用this,this指向undefined

reactive()****

reactive()函授接收一个对象,返回该对象的响应式代理

 let obj = reactive({ name: "小米", age: 18 });

ref()****

1:ref函数接收简单数据类型,返回一个响应式对象,该对象只有一个属性value

2:在模版中使用ref数据类型,会自动解析value属性

toRefs()****

1:reactive()函数响应式功能是赋予对象的,如果将对象展开会,会丢失数据响应式能力

2:torefs()函数能保证展开的对象属性都是响应式的

...torefs({name:’小明’,age:15})

readOnly()****

1:只读,不能修改值

计算属性****

1:传入一个getter()函数,返回一个只读的计算属性

 let jAge = ref(15);

    let mAge = computed(() => {

      return Number(jAge.value) + 1;

    });

2:传入一个对象,包括get()跟set(),返回一个可修改的计算属性

 let jAge = ref(15);

    let mAge = computed(() => {

      return Number(jAge.value) + 1;

    });

    let hAge = computed({

      get() {

        return Number(jAge.value) + 2;

      },

      set(value) {

        jAge.value = value - 2;

      },

    });

监听属性****

1:watch监听接收三个参数

参数1:监听数据源

参数2:新值,旧值回调函数

参数3:监听对象配置(深层监听,立即执行)

2:watch可以监听单个或者多个数据源

3:watch会有返回值停止监听

Vue3生命周期****

 

Provide/Inject:****

用于祖先组件向后代组件传递数据,通过 Provide 提供数据,通过 Inject 注入数据。祖先组件通过 provide 提供数据,后代组件通过 inject 接收数据。

V ue3.0 ref使用****

创建空的ref

Const test=ref(null)

test.value.innerHTML=’哈哈’