组合式(Composition)API

这篇具有很好参考价值的文章主要介绍了组合式(Composition)API。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 1、选项式API与组合式API

在vue中我们有两种API,一种是选项式,一种是组合式,其中选项式主要用于vue2,组合式主要用于vue3。

选项式API(Option API) 

在vue2中我们书写选项式API,每个选项都有固定的书写位置,使用data选项来书写响应式数据,methods中书写方法。

  • 优点:写代码的位置已经约定好,结构清晰

  • 缺点:代码组织性差,相似的逻辑代码不便于复用,逻辑复杂代码多了不好阅读,同一功能的上下文代码难找。

  • export default{
        data(){
            return{
                list:[]
            }
        },
        methods:{
        //书写方法函数,在需要读取data中定义的数据时,需要使用this. 来获取,所以里面不能使用箭头函数
           
     },
       
        }
    

    组合式API(composition)

         所有与特定功能相关地代码可以写到一块,代码比较集中,在定义响应式数据时不在需要data,方法函数也不再写在metgods中

<script setup>
import { computed,watch,ref ,reactive} from "vue";
//定义响应式数据
const num = ref('');
const list = reactive([]);
//定义方法
const getNum=()=>{
    
}

</script>

 2、生命周期函数

选项式API 组合式APT
beforeCreate 没有beforeCreate,在setup中做了beforeCreate、created中应该做的事
created
beforeMount onBeforeMount挂载DOM前
mounted onMounted挂载DOM后
beforeUpdate onBeforeUpdate更新组件前
updated onUpdated更新组件后
beforeDestroyed onBeforeUnmount卸载销毁前
destroyed

onUnmount销毁之后

    最常用的两个钩子函数是onMounted、onUpdated。在onMounted我们一般需要将页面需要的数据拿到,在页面渲染时,渲染到页面上。setup只会执行一次,在页面加载之前执行。

 3、响应式数据的定义

1、reactive

我们可以使用reactive()来创建一个数组或者对象

import { reactive } from 'vue'
const todolist = reactive([])

在template中直接使用,在方法或者回调函数中使用todolist

reactive() 的局限性

  1. 仅对对象类型有效(对象、数组和 MapSet 这样的集合类型),而对 stringnumberboolean 这样的 原始类型 无效。

  2. 因为 Vue 的响应式系统是通过属性访问进行追踪的,因此我们必须始终保持对该响应式对象的相同引用。这意味着我们不可以随意地“替换”一个响应式对象,因为这将导致对初始引用的响应性连接丢失。

  3. 同时这也意味着当我们将响应式对象的属性赋值或解构至本地变量时,或是将该属性传入一个函数时,我们会失去响应性

    2、ref()

    ref()声明的值,在模板中可以直接使用,ref()将传入参数的值包裹在一个带有.value属性的ref对象中,所以在调用ref声明的值时,需要调用它的,value,才可以拿到对应的值。一个包含对象类型值的 ref 可以响应式地替换整个对象。

    ref 被传递给函数或是从一般对象上被解构时,不会丢失响应性

    //使用ref定义响应式数据
    const sum = ref(0);
    const todoval = ref('');
    const arr = ref([1,3,5]);
    ​
    //在模板中直接使用
    <template>
    <p>{{ count }}</p>
    <ul>
        <li v-for="(item,index) in arr" :key="index"></li>
    </ul>
    </template>
    ​
    //在方法中使用需要使用.value才可以拿到对应的值
    const addTodo =()=>{
        emit('add',todoVal.value)
             todoVal.value=''
    };
    ​

    3、toref()

    转换响应式对象中某个属性为单独响应式数据,并且值是关联的。是基于响应式对象上的一个属性,创建一个对应的ref,这样创建的ref与原属性保持同步,改变原属性的值,将改变ref的值。

    const state = reactive({
      a: 1,
      b: 2
    })
    const fooRef = toRef(state, 'a')
    // 更改该 ref 会更新源属性
    aRef.value++
    console.log(state.a) // 2
    // 更改源属性也会更新该 ref
    state.a++
    console.log(aRef.value) // 3
    ​
    请注意,这不同于:
    const aRef = ref(state.a)//1 不会改变ref的值,因为他接受到的是一个纯数值

    4、torefs()

    将一个响应式对象转换成一个普通的对象,这个普通对象的每个属性都是指向原对象相应属性的ref,每个单独的ref都是根据toref()创建的。

    toRefs 在调用时只会为源对象上可以枚举的属性创建 ref。如果要为可能还不存在的属性创建 ref,需要调用toref

    const state = reactive({
      foo: 1,
      bar: 2
    })
    ​
    const stateAsRefs = toRefs(state)
    // 这个 ref 和源属性已经“链接上了”
    state.foo++
    console.log(stateAsRefs.foo.value) // 2
    ​
    stateAsRefs.foo.value++
    console.log(state.foo) // 3

    4、copmuted()

  • computed函数,是用来定义计算属性的,计算属性不能修改。

computed函数接受一个getter函数,返回一个只读的ref对象,该对象是一个响应式的,该对象通过.value暴露getter的返回值,它也可以创建一个带有get set的响应式ref对象。

创建一个只读的计算属性ref

const sum = ref(0);

const sumadd = computed(()=>{
 console.log('sum',sum.value)
});

组合式api,vue.js,前端,javascript

 创建一个可写的计算属性 ref,通过get set 创建一个响应式对象

const count = ref(1)

const changecount = computed(()=>{
get:()=>count.value++;
set:(sum)=>{
count.value=sum+1
}
})

组合式api,vue.js,前端,javascript

 5、watch事件监听函数

watch() 侦听一个或多个响应式数据源,并在数据源变化时调用所给的回调函数,watch() 默认是懒侦听的,即仅在侦听源发生变化时才执行回调函数。
第一个参数是侦听器的源。这个来源可以是以下几种:

  • 一个函数,返回一个值
  • 一个 ref
  • 一个响应式对象
  • ...或是由以上类型的值组成的数组

第二个参数是在发生变化时要调用的回调函数。

  • watch函数,是用来定义侦听器的
  • 监听ref定义的响应式数据
  • 监听多个响应式数据数据
  • 监听reactive定义的响应式数据
  • 某一个属性深度监听
  • 默认执行

当直接侦听一个响应式对象时,侦听器会自动启用深层模式 

监听ref定义的响应式数据

import {ref,reactive,watch} from 'vue';
const num =ref(0)
const changeNum = ()=>{
    num.value +=1
}
watch(num,()=>{
    console.log('num改变了',num.value)

})

 组合式api,vue.js,前端,javascript组合式api,vue.js,前端,javascript

监听reactive定义的响应式数组

const list =reactive([{name:'张三',id:1},{name:'李四',id:2}])

const changeList = ()=>{
    list.push({name:'李华',id:2})
}

watch(list,()=>{
    console.log('list改变了',list)
})

组合式api,vue.js,前端,javascript组合式api,vue.js,前端,javascript

 监听reactive定义的响应式对象,在读取以及修改数据时,要使用对姓名.键值  的方式

<h1>{{ person.name }}</h1>
<button @click="getName">点我</button>


const person = reactive({name:'xiaoming'})
const getName=()=>{
    person.name='tom'
}
watch(person,()=>{
    console.log('person改变了',person)
})

 watchEffect()

watch选项来侦听data或者props的数据变化,当数据变化时执行某一些操作,watchEffect() 立即运行一个函数,同时响应式地追踪其依赖,并在依赖更改时重新执行。 

const name = ref("jeck");
      const age = ref(18);
 
      const changeName = () => name.value = "bob"
      const changeAge = () => age.value++
 
      watchEffect(() => {
        console.log("name:", name.value, "age:", age.value);
      });

停止监听 stop()

const name = ref("jeck");
      const age = ref(18);
      const stop = watchEffect(() => {
        console.log("name:", name.value, "age:", age.value);
      });
      const changeName = () => name.value = "bob"
      const changeAge = () => {
        age.value++;
       
        if(age.value>23){
            stop()
        }
    }

取消 watchEffect()函数的副作用文章来源地址https://www.toymoban.com/news/detail-766695.html

watchEffect(async (onCleanup) => {
  const { response, cancel } = doAsyncWork(id.value)
  // `cancel` 会在 `id` 更改时调用
  // 以便取消之前
  // 未完成的请求
  onCleanup(cancel)
  data.value = await response
})

到了这里,关于组合式(Composition)API的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 快速入门vue3组合式API

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 使用create-vue创建项目 熟悉项目目录和关键文件  组合式API  setup选项 setup选项的写法和执行时机 script setup 语法糖 reactive和ref函数 reactive() ref() computed watch 侦听单个数据

    2024年02月12日
    浏览(49)
  • 【前端Vue】Vue3+Pinia小兔鲜电商项目第1篇:认识Vue3,1. Vue3组合式API体验【附代码文档】

    通过 Counter 案例 体验Vue3新引入的组合式API 特点: 代码量变少 分散式维护变成集中式维护 ![image.png]( create-vue是Vue官方新的脚手架工具,底层切换到了 vite (下一代前端工具链),为开发提供极速响应 ![image.png]( 前置条件 - 已安装16.0或更高版本的Node.js 执行如下命令,这一指

    2024年03月17日
    浏览(54)
  • 基于Vue组合式API的实用工具集

    今天,给大家分享一个很实用的工具库 VueUse,它是基于 Vue Composition Api,也就是组合式API。支持在Vue2和Vue3项目中进行使用,据说是目前世界上Star最高的同类型库之一。 图片 官方地址: https://vueuse.org/ 中文地址: https://www.vueusejs.com/ github: https://github.com/vueuse/vueuse 图片 链接

    2024年01月23日
    浏览(39)
  • vue3组合式api单文件组件写法

    一,模板部分  二,js逻辑部分 

    2024年02月13日
    浏览(50)
  • vue3 组合式 api 单文件组件写法

    Vue3 中的 Composition API 是一种新的编写组件逻辑的方式,它提供了更好的代码组织、类型推导、测试支持和复用性。相比于 Vue2 的 Options API,Composition API 更加灵活和可扩展。 在 Composition API 中,我们使用 setup 函数来定义组件的逻辑部分。setup 函数是一个特殊的函数,在创建组

    2024年02月12日
    浏览(39)
  • Vue3: 选项式API和组合式API的优缺点

    Vue框架提供了两种不同的API风格来编写组件,分别是 选项式API 和 组合式API 。 一.选项式API: 选项式API是vue2.x版本中默认使用的API风格,它是基 于对象的方式 来描述组件的行为和状态的。选项式API需要在Vue组件的选项对象中声明组件的属性和方法,如data、methods、computed、

    2024年02月09日
    浏览(46)
  • 带你了解vue3组合式api基本写法

    本文的目的,是为了让已经有 Vue2 开发经验的 人 ,快速掌握 Vue3 的写法。 因此, 本篇假定你已经掌握 Vue 的核心内容 ,只为你介绍编写 Vue3 代码,需要了解的内容。 一、Vue3 里 script 的三种写法 首先,Vue3 新增了一个叫做组合式 api 的东西,英文名叫 Composition API。因此 Vu

    2024年02月01日
    浏览(80)
  • vue3:7、组合式API-watch

     

    2024年02月09日
    浏览(43)
  • 【vue3.0 组合式API与选项式API是什么,有什么区别】

    Vue3.0中引入了组合式API(Composition API),同时保留了选项式API(Options API)。两种 API 风格都能够覆盖大部分的应用场景。它们只是同一个底层系统所提供的两套不同的接口。实际上,选项式 API 是在组合式 API 的基础上实现的!关于 Vue 的基础概念和知识在它们之间都是通用的

    2024年02月10日
    浏览(43)
  • 【Vue3】如何创建Vue3项目及组合式API

    文章目录 前言 一、如何创建vue3项目? ①使用 vue-cli 创建  ②使用可视化ui创建  ③npm init vite-app   ④npm init vue@latest 二、 API 风格 2.1 选项式 API (Options API) 2.2 组合式 API (Composition API) 总结 例如:随着前端领域的不断发展,vue3学习这门技术也越来越重要,很多人都开启了学习

    2024年02月03日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包