Vue3组合API-----setup()

 

1.Vue3最重要的新特性之一:

作用:

之前vue对象规定了我们必须把某一类数据放到某一个结构中,这样在一定程度上对我们的代码进行了强制的分割。而在vue3 中我们引入了setup()合成API语法,他可以将某数据关联的内容都整合到一个部分,即使setup()中的内容越来越多,也会围绕着大而不乱的形式开发项目。

 

2.setup组合api特点:

(1) 更加直观,接近原生js

      (2) 按需加载

      (3)没有this,降低了耦合性,提高复用性

 

 3.setup():

(1)setup()结构中定义的变量,函数都需要return之后才可以在模板中使用,

(2).setup()是处于created生命周期之前的函数,也就是说data,methods中的数据是无法访问到的,setup()结构中的this指向

undefined ref :在setup中只能包装字符串或数字形式的数据(值),使其变为响应式数据

(3)setup函数只能是同步的不能是异步的。

《1》setup 组件选项:

  • 新的 setup 选项在组件创建之前执行,一旦 props 被解析,就将作为组合式 API 的入口。
  • setup 中避免使用 this , setup的调用 在 data 、methods、computed 解析之前
  • setup 选项是一个接收 props 和 context 的函数
  • 将setup 返回的函数 暴露给 组件的其余部分 (计算属性、方法、生命周期)

《2》ref值类型 响应对象:

refs: 可以直接在html模板中使用对象的属性名当变量,不需要用 . 访问 ,实现对简单值的监听

ref注意点:

   -在vue(template)中使用ref的值不用通过value获取

   -在TS中使用ref的值必须通过value获取

const count = ref(5),在setup访问count值,count.value 来访问

《3》reactive 引用类型 响应式:

reactive: 在setup中包装对象,数组形式的数据(对象/数组),使其变成响应式数据

reative注意点:

   -reative参数必须是对象(json/array);

   -如果给reactive传递了其他对象

   -默认情况下修改对象,界面不会自动更新

   -如果想更新,可以通过重新赋值的方式

const list = reactive(默认值)

x  list = xxx  直接赋值破坏了引用

√ list.push(xxx)

《4》 ref和reactive的区别:

vue在解析数据之前,会自动判断在template里使用的数据是否是ref类型的,如果是,vue自动添加.value

如果在templatel里使用的是reactive类型的数据,则vue不会自动添加.value。

 

4.setup()结构中如何使用生命周期函数:

vue3 axios 多个 baseURL vue3 组合api_数据更新

 

5.vue对象的生命周期函数:

《1》vue对象创建成功之前与创建成功之后:   beforeCreated   created

《2》页面dom元素(view)与vue对象(model)绑定成功之前与绑定成功之后:  beforeMounted   mounted

《3》view与model数据更新之前与数据更新之后:  beforeUpdate   updated

《4》vue对象销毁之前与销毁之后:  beforeDestory  destoryed

 

beforeCreate() {
    console.log('beforeCreate:vue对象创建成功之前')
  },
  created() {
    console.log('created:vue对象创建成功之后')
  },
  beforeMount() {
    console.log('beforeMount:view与moudel绑定成功之前')
  },
  mounted() {
    console.log('mounted:view与moudel绑定成功之后')
  },
  beforeUpdate() {
    console.log('beforeUpdate:view或model数据更新之前')
  },
  updated() {
    console.log('update:view或model数据更新之后')
  },
  beforeDestroy() {
    console.log('beforeDestory:vue对象销毁之前')
  },
  destroyed() {
    console.log('destory:vue对象销毁之后')
  }