vue 组合API

news2024/9/29 17:28:57

一、组合API是什么?

通过创建 Vue 组件,我们可以将界面中重复的部分连同其功能一起提取为可重用的代码段。

组合api

提供复用性

降低耦合性

增加可读性

下面我们来看下在vue2.0中的一个场景:在2.0里面的**export

default{}**通常是由components、props、data()、computed、watch、methods、mounted、created()等这些成员组成。我们都知道一些数据属性一般都会写在data()中,而一些方法通常定义在methods中,然后再在这些方法中通过this来使用data()中的数据属性。如果一个组件代码量比较少还没什么问题,但是一旦遇到一个大型组件,光js代码就成千上万行,想想如果我们想看看data中的属性都在哪些方法中用到了,这时麻烦就来了,我们不得不上上下下来来回回拖动滚动条来查看,尤其是对于那些没有编写过这些组件的人来说,会更加导致对组件的难以阅读和理解。以下是vue官方大大给出的一个大型组件的示例图,其中不同色块代表的就是不同的逻辑关注点:

这是一个大型组件的示例,其中逻辑关注点按颜色进行分组。

这种碎片化使得理解和维护复杂组件变得困难。选项的分离掩盖了潜在的逻辑问题。此外,在处理单个逻辑关注点时,我们必须不断地“跳转”相关代码的选项块。

如果能够将同一个逻辑关注点相关代码收集在一起会更好。而这正是组合式 API 使我们能够做到的。

二、组合式 API 基础

既然我们知道了为什么,我们就可以知道怎么做。为了开始使用组合式 API,我们首先需要一个可以实际使用它的地方,为了能够让我们更方便的使用组合式API,vue3.0为我们提供了一个新的组件选项:setup

1.setup 组件

setup是一个接收2个参数的函数props和context

props:props是setup的第一个参数,该参数是响应式的,因此不能用 ES6进行解构,因为会消除它的响应式

context:context是setup的第二个参数,context是JavaScript中的一个普通对象,它不是响应式的可以放心的使用ES6结构。context对外暴露了一些可能会用到的值,比如:attrs、slots、emit、expose等

setup函数中不能使用this,因为这里this并不会找到vue的实例

注:如果要进行响应式 要使用ref来进行

  // 组合式API    将同一个逻辑关注点相关的代码收集在一起
  setup(){
    // 组件被创建时执行,不需要使用this,this不会指向实例

    
    // 没有响应式
    let hello ="hello";
    console.log(hello);

    //响应式 需要导入 ref
    const countmst=ref(0);
    const Addmsg=()=>{
      countmst.value++
    }

    return {hello,countmst,Addmsg}
  }




<template>
  <h2>我是静态的:{{ hello }}</h2>
  <h2>我是响应式的:{{ countmst }}</h2>
  
  <button @click="Addmsg">++</button>
</template>

通过reactive定义引用数据类型的数据

如果要使结构后的数据可以响应式就是用toRefs

在setup中使用watch监听

监听对象 会发现无法监听值改变

使用watchEffect

setup中使用computed

setup使用生命周期函数

import { ref } from 'vue'

export default{
    components:{},
    props:{title},
    setup(props,context){
        let message = ref('hello world')//定义一个响应式的变量
        const getTitle = ()=>{ console.log('title')}//定义一个普通函数
        onMounted(getTitle);//调用生命周期函数
        //所有需要给模板或其它钩子函数使用的都需要在这里暴露出去
        return {
            message,
            getTitle
        }
    }
}

setup使用provide/Inmject

引用

子组件

setup语法糖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/381249.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.排序算法之二:选择排序

选择排序&#xff08;select sort&#xff09;在无序列表中&#xff0c;把无序列表分成有序区&#xff08;刚开始有序区元素个数为0&#xff09;和无序区&#xff08;刚开始无序区元素个数为n&#xff09;&#xff0c;循环n-1趟&#xff0c;每一趟找到最小或最大的那个元素&…

CNC数据采集解决方案(2023杭州乐芯科技)

杭州乐芯科技IOT数据采集平台产品是杭州乐芯科技有限公司为满足工业4.0大型集团工厂推出的新一代数据采集平台级产品&#xff0c;可满足单一平台&#xff08;一个服务器&#xff09;同时采集各类设备&#xff0c;同时兼容各种工业数据采集协议&#xff0c;单服务器压力测试达10…

chainWebpack之optimization.splitChunks的cacheGroups缓存组代码分块实践案

研究了好几天webpack打包&#xff0c;我们项目是vue的高版本&#xff0c;已经没有了webpack.config.js文件了&#xff0c;是直接在vue.config.js里的chainWebpack方法直接配置&#xff0c;这样做法的好处是用户既可以保留webpack的默认配置&#xff0c;又可以通过chainWebpack设…

【Java开发】JUC基础 05:线程通信/协作

1 生产者消费者问题&#x1f4cc; 线程通信应用的场景可以简单地描述为生产者和消费者问题假设仓库中只能存放一件产品&#xff0c;生产者将生产出来的产品放入仓库&#xff0c;消费者将仓库中产品取走消费&#xff1b;如果仓库中没有产品&#xff0c;则生产者将产品放入仓库&a…

Java知识复习(八)Spring基础

1、什么是Spring框架&#xff1f; Spring &#xff1a;是一款开源的轻量级 Java 开发框架&#xff0c;旨在提高开发人员的开发效率以及系统的可维护性 2、Spring、SpringMVC和SpringBoot的区别 Spring主要指Spring Framework&#xff0c;就是指如上图所示的各项功能模块Spr…

【Java 多线程学习】

多线程学习多线程1. 并行与并发2.进程和线程3. *****多线程的实现方式3.1 继承Thread类的方式进行实现3.2 实现Runnable接口方式进行实现3.3 利用Callable和Future接口方式实现3.4 设置获取线程名字4.获得线程对象5.线程休眠6.线程调度[线程的优先级]7.后台线程/守护线程多线程…

Pytest自动化框架-权威教程02-Pytest 使用及调用方法

Pytest 使用及调用方法使用python -m pytest调用pytest2.0版本新增你可以在命令行中通过Python编译器来调用Pytest执行测试:Copypython -m pytest [...]通过python调用会将当前目录也添加到sys.path中,除此之外,这几乎等同于命令行直接调用pytest [...]。可能出现的执行退出cod…

【K8S笔记】Kubernetes 集群架构与组件介绍

K8S 官方文档 https://kubernetes.io/zh/docs/home ##注重关注 概念和任务 板块。 K8S 集群架构 K8S也是运用了分布式集群架构&#xff1a; 管理节点/Master 整个集群的管理&#xff0c;任务协作。工作节点/Node 容器运行、删除。 K8S 组件介绍 管理节点/Master 相关组件 …

JDK1.8 ConcurrentHashMap

数据结构锁sizeCtlconcurrencyLevelForwardingNode、ReservationNode扩容get、put、removehashmap&#xff1a;线程不安全 hashtable&#xff1a;通过synchronized保证线程安全但效率低。强一致性 ConcurrentHashMap&#xff1a;弱一致性 数据结构 ConcurrentHashMap为node数…

前端转golang从小白到实战自学笔记(2023/3/1)

了解&#xff1a;https://www.runoob.com/go/go-concurrent.htmlgolang学习方向区块链研发工程师go服务器>&#xff08;特点&#xff1a;数据处理&#xff0c;处理大并发&#xff09;/游戏软件工程师golang分布式/云计算软件工程师&#xff08;盛大云、cdn、京东&#xff09…

Mybatis主要流程源码分析

分层架构图 主要流程图 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d9uhH9IK-1677658947721)(https://note.youdao.com/yws/public/resource/7f152b4b25320263d411a49583d3f4db/xmlnote/WEBRESOURCE9ea90840088eaeaa4a463bbc3f1912e8/17619)] 主…

索引优化与查询优化

1.哪些维度可以进行数据库调优 索引失效、没有充分利用到索引–》索引建立关联查询太多JOIN (设计缺陷或不得已的需求)–》SQL优化服务器调优及各个参数设置(缓冲、线程数等)–》调整my.cnf数据过多–》分库分表 大方向上完全可以分成 物理查询优化和 逻辑查询优化 两大块 物…

记录一次挖矿病毒kthreaddk和rcu_bj,导致CPU飙高处理

htop命令 存在kthreaddk和rcu_bj进程&#xff0c;cpu飙高 占用一般cpu或者70-80% 1、检查定时任务 查看是否有 # crontab -l 检查root账号是否有异常定时任务 有的话crontab -e 修改定时任务保存 并检查所有的用户有没有定时任务( 注&#xff1a;我的是gitlab git账户被入侵)异…

Nginx 配置详解(二)

序言Nginx的代理功能与负载均衡功能是最常被用到的&#xff0c;描述一些关于代理功能的配置&#xff0c;再说明负载均衡详细。Nginx 代理服务的配置说明1、设置 404 页面导向地址error_page 404 https://www.runnob.com; #错误页 proxy_intercept_errors on; #如果被代理服务…

PowerShell Install Mysql 5.7

MySQL介绍 MySQL 是最流行的关系型数据库管理系统&#xff0c;在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System&#xff1a;关系数据库管理系统)应用软件之一。 mysql download Mysql ServerdownloadPowershell 使用使用参数参考 前提条件 开启…

机器学习算法-KNN、决策树

目录1、最近邻算法 KNN1.1 K的选择1.2 案例&#xff1a;鸢尾花2、决策树2.1 决策树介绍2.2 案例&#xff1a;鸢尾花数据2.3 补充1、最近邻算法 KNN 原理&#xff1a;找到K 个与新数据最近的样本&#xff0c;取样本中最多的一个类别作为新数据的类别 要点&#xff1a;距离—是欧…

Three.js上手——搭建Vue3+Three.js项目

上一篇文章 Three.js初试 介绍了一些 Three.js 的基本概念&#xff0c;这一篇主要是介绍一下它的应用。 结合 Vue3 Vite 一起搭建一个项目。 项目初始化 Vite 项目构建 兼容性注意 Vite 需要 Node.js 版本 14.18&#xff0c;16。然而&#xff0c;有些模板需要依赖更高的 Nod…

代码随想录【Day29】|491. 递增子序列、46. 全排列、47. 全排列 II

491. 递增子序列 题目链接 题目描述&#xff1a; 给定一个整型数组, 你的任务是找到所有该数组的递增子序列&#xff0c;递增子序列的长度至少是2。 示例: 输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]] 说明: …

教务选课排课系统

技术&#xff1a;Java、JSP等摘要&#xff1a;Internet网是目前全球最大的计算机通信网&#xff0c;它遍及全球几乎所有的国家和地区。www系统是一个大型的分布式超媒体信息数据库&#xff0c;它极大的推动了Internet的发展&#xff0c;己经成为Internet中最流行、最主要的信息…

防抖节流函数

防抖和节流对于每一个开发者来说&#xff0c;都不陌生。防抖和节流的概念其实最早并不是出现在软件工程中&#xff0c;防抖是出现在电子元件中&#xff0c;节流出现在流体流动中。 而JavaScript是事件驱动的&#xff0c;大量的操作会触发事件&#xff0c;加入到事件队列中处理…