vue3基础学习

251 阅读3分钟

前言

vue3已经是默认版本,必须得学习一下,每天都能进步一点。

### vue3新特性之初识setup

1、setup

新的组件选项,在创建组件之前执行,并作为组合式 API 的入口点


2、setup返回值


set(){
  const msg:string='xdclass';
  return{
    msg
  }
}
//如果在setup中返回值是一个对象,对象中的属性或方法,模版中可以直接使用

vue3新特性学习之ref

1、问题引出


setup(){
 let msg:string='xdclass';
  
  function changeMsg(){
    msg='老帆';
  }
  return{
    msg,
    changeMsg
  }
}
​
​
//模版中
​
{{msg}}
<button @click="changeMsg">改变</button>

 

2、ref


接受一个内部值并返回一个响应式且可变的 ref 对象。
​
const val=ref(msg);
const val=ref('xdclass');
//返回的是一个响应式且可变的ref对象//通过 val.value方法返回的这个ref对象中的值
console.log(val.value);
​
//在模版中使用
//直接使用val即可,
{{val}}

### vue3新特性学习之reactive

1、reactive


作用:定义多个数据的响应式
​
const proxy=reactive(obj):接收一个普通对象然后返回该普通对象的响应式代理器对象
​
* 响应式转换是“深层的”:会影响对象内部所有的嵌套的属性
​


 

2、练习


setup(){
  
  const obj=reactive({
    name:'小D',
    courses:['javase','ssm','springboot'],
    gender:'男'
  })
  
  function changeCourse(){
    obj.name +='+';
  }
  
    function changeName(){
    obj.courses[0] +='+';
  }
  //访问:
  console.log(obj);
  
  return{
    obj,
    changeCourse,
    changeName
  }
}
​
​
//模版中使用
<button @click='changeName'>改变名字</button>
<button @click-'changeCourse'>改变课程</button>
姓名:{{obj.name}}<br>
课程:
<ul>
<li v-for='(item,index) in obj.courses' :index='index'>{{item}}</li>
</ul>

### vue3新特性学习之setup刨析

1、setup执行时机


在beforeCreate之前执行(执行一次),此组件对象还没有创建,
thisundefined,不能通过this来访问data\computed\methods\props
​
​
此时要想使用组件怎么办呢?
可以通过getCurrentInstance这个函数来返回当前组件的实例对象,也就是当前vue这个实例对象


 

 

2、setup返回值


一般都返回一个对象:为模版提供数据,也就是模版中可以直接使用此对象中的所欲属性方法
返回对象中属性会与data函数返回对象的属性合并为组件对象的属性
返回对象中的方法会与methods中的方法合并成功组件对象的方法
​
思考问题一:
    为什么methods中可以使用方法setup提供的属性和方法,但是在setup方法中不能访问data和methods?
  

### vue3新特性中的生命周期钩子函数


vue2 声明周期钩子函数



beforeCreate() {



    console.log("beforeCreate 执行了~~~");


  },

  created() {



    console.log("created 执行了~~~");



  },



  beforeMount() {



    console.log("beforeMount 执行了~~~");



  },

  mounted() {



    console.log("mounted 执行了~~~");



  },



  beforeUpdate() {



    console.log("beforeUpdate 执行了~~~");



  },

  updated() {



    console.log("updated 执行了~~~");



  },



  BeforeUnmount() {



    console.log("BeforeUnmount 执行了~~~");



  },



  unmounted() {



    console.log("mounted 执行了~~~");



  },



      



      


vue3的声明周期钩子函数


    onBeforeUnmount(() => {



      console.log("vue3 ------onBeforeUnmount 执行了~~~");


   });


    onMounted(() => {
     console.log("vue3 ------onMounted 执行了~~~");



    });



    onBeforeUpdate(() => {



      console.log("vue3 ------onBeforeUpdate 执行了~~~");

    });

    onUpdated(() => {


      console.log("vue3 ------onUpdated 执行了~~~");

    });



    onBeforeUnmount(() => {


      console.log("vue3 ------onBeforeUnmount 执行了~~~");



    });


    onUnmounted(() => {


      console.log("vue3 ------onUnmounted 执行了~~~");


    });

### vue3中computed(计算属性)

使用 getter 函数, 返回的值返回一个不变的响应式 ref 对象。


const count = ref(1)
const plusOne = computed(() => count.value + 1)
​
console.log(plusOne.value) // 2
​
plusOne.value++ // error


 

或者,它可以使用具有 get 和 set 函数的对象来创建可写的 ref 对象。


const count = ref(1)
const plusOne = computed({
  get: () => count.value + 1,
  set: val => {
    count.value = val - 1
  }
})
​
plusOne.value = 1
console.log(count.value) // 0

### vue3中watch(监听器)

1、watch在vue3中如何使用

`
const obj=reactive({
    name:'小D',
    courses:['ssm','javase','springboot']
})
​
​
watch(obj,(value)=>{
    console.log(value);
    console.log(obj);
    
})


 

2、vue3中watch的配置


watch:中的第一个参数监视源  count   第二个参数 回调函数 第三个参数watch配置项
​
第三个配置项中有两个参数
immedudate:默认值为false, 开启后默认会执行一次watch
deep:开启深度监视


 

3、watch监听多个源

watch([参数一,参数二],()=>{});