Vue3 组合式API

Vue3 组合式API

定义 : 组合式API ( Composition API ) 是一系列API 的集合,是我们可以使用函数而不是声明选项的方式书写Vue组件

  1. setup 语法糖 : script标签添加 setup标记,不需要再写return语句,默认会添加return语句

  2. 响应式数据 : reactiveref

    a. reactive

    1. 在script中导入 import { reactive } from ‘vue’
    2. 作用 : 接收对象类型数据的参数传入并返回一个响应式的对象
      <script setup>
       import { reactive } from 'vue'  // 导入
       
       const state = reactive({       // 执行函数 传入参数 变量接收
         count:0
       })
       const add = ()=>{
         state.count++ // 修改数据更新视图
       }
      </script>
      
      <template>
        <button @click="add">{{state.count}}</button>
      </template>
    

    b. ref

    1. 在script中导入 import { ref } from ‘vue’

    2. 作用 : 接收简单类型对象类型数据的参数传入并返回一个响应式的对象

    3. ref 在模板中取值 直接 {{ 属性名 }}

    4. ref 在代码中修改值要加上 属性名.value , 如果响应式数据是一个对象则为 : 对象.value.属性名
      示例代码 :

      <script setup>
      // setup 语法糖
      
      // 响应式数据 ref
      import { ref } from 'vue'
      
      const name = ref('田田')
      const nickName = ref({
        name : '甜甜'
      })
      //定义函数
      const clickHandler = () => {
        name.value = '小田田'
        nickName.value.name = '小甜甜'
      }
      </script>
      
      
      <template>
        setup: {{name}}
        setup: {{nickName.name}}
      <button @click="clickHandler">Click me</button>
      </template>
      
      <style>
      </style>
      

    c. 计算属性 computed

    1. 在script中 使用 import { computed } 导入

    2. 执行函数在回调参数中return基于响应式数据做计算的值,用变量接收

    3. 示例代码

       <script setup>
       // 计算属性  通过计算属性对响应式数据进行计算
       // 需求 筛选出大于2的新数组
       import { ref, computed } from 'vue'
       const arr = ref([1, 2, 3, 4, 5])
       const filterArr = computed(() => {
         return arr.value.filter(item => item >2)
       })
       
       const add = () =>{
         arr.value.push(10)
       }
       </script>
       
       <template>
         <div>
           原数组: {{arr}}
           <button @click.once="add" >10进入原数组</button>
         </div>
       			//  @click.once 只点击一次
         <div>
           计算属性: {{filterArr}}
         </div>
       </template>
    

    d. 侦听器 watch

    1. 在script中 使用import { watch } from ‘vue’
    2. 侦听器默认是浅层侦听
    3. 使用方法,示例代码
<script setup>
// watch 侦听器
import { ref, watch } from 'vue'
const count = ref(0)
const age = ref(19)
const add = () => {
count.value++
age.value++
}
// watch 侦听器
// 1. 侦听一个值的变化
watch(count, (newVal, oldVal) => {
    console.log(newVal, oldVal)
    })

// 2. 侦听多个值的变化
watch([count,age], (newVal, oldVal) => {
console.log(newVal, oldVal)
})

// 3 . 立即侦听 : 先执行watch中的回调函数
watch(count, (newVal, oldVal) => {
    console.log(newVal, oldVal)
    },{immediate: true })// 立即侦听

</script>

<template>
  <div>
  	<p>count: {{count}}</p>
  	<p>age: {{age}}</p>
  	<button @click="add">加加</button>
  </div>
</template>

e. watch 深度侦听

<script setup>
  // watch 侦听器
import { ref, watch } from 'vue'
const info = ref({
  name: '小田',
  age: 19,
  address: '武汉'
})
const changeAge = () => {
  info.value.age++
}
const changeAddress = () => {
  info.value.address = '上海'
}
// 开启 deep 深度侦听
// 通过watch第三个参数配置项开启
// 坏处 
// 1. 它会遍历每一个属性去监听,性能不好
// 2. 任意一个属性变化都会去触发
watch(info,()=>{
  console.log('info变化了')
},{deep: true})

// 需求 在不开启deep深度侦听的情况下,能不能只侦听某一个指定的属性?
// 通过watch第一个参数配置项 配置回调函数的返回值
watch(()=> info.value.age,()=>{
  console.log('age变化了')
})
</script>

<template>
  	<div>
  		<button @click="changeAge">{{ info.age }}</button>
  		<button @click="changeAddress">{{ info.address }}</button>
 	 </div>
</template>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值