组合式API介绍

通过创建 Vue 组件,我们可以将接口的可重复部分及其功能提取到可重用的代码段中。仅此一项就可以使我们的应用程序在可维护性和灵活性方面走得更远。然而,我们的经验已经证明,光靠这一点可能是不够的,尤其是当你的应用程序变得非常大的时候——想想几百个组件。在处理如此大的应用程序时,共享和重用代码变得尤为重要。

假设在我们的应用程序中,我们有一个视图来显示某个用户的仓库列表。除此之外,我们还希望应用搜索和筛选功能。处理此视图的组件可能如下所示:

// src/components/UserRepositories.vue

export default {  components: { RepositoriesFilters, RepositoriesSortBy, RepositoriesList },  props: {    user: { type: String }  },  data () {    return {      repositories: [], // 1      filters: { ... }, // 3      searchQuery: '' // 2    }  },  computed: {    filteredRepositories () { ... }, // 3    repositoriesMatchingSearchQuery () { ... }, // 2  },  watch: {    user: 'getUserRepositories' // 1  },  methods: {    getUserRepositories () {      // 使用 `this.user` 获取用户仓库    }, // 1    updateFilters () { ... }, // 3  },  mounted () {    this.getUserRepositories() // 1  }}

该组件有以下几个职责:

  1. 从假定的外部 API 获取该用户名的仓库,并在用户更改时刷新它
  2. 使用 searchQuery 字符串搜索存储库
  3. 使用 filters 对象筛选仓库

用组件的选项 (datacomputedmethodswatch) 组织逻辑在大多数情况下都有效。然而,当我们的组件变得更大时,逻辑关注点的列表也会增长。这可能会导致组件难以阅读和理解,尤其是对于那些一开始就没有编写这些组件的人来说。

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

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

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

组合式 API 基础

既然我们知道了为什么,我们就可以知道怎么做。为了开始使用组合式 API,我们首先需要一个可以实际使用它的地方。在 Vue 组件中,我们将此位置称为 setup

setup 组件选项

新的 setup 组件选项在创建组件之前执行,一旦 props 被解析,并充当合成 API 的入口点。

由于在执行 setup 时尚未创建组件实例,因此在 setup 选项中没有 this。这意味着,除了 props 之外,你将无法访问组件中声明的任何属性——本地状态、计算属性或方法。

setup 选项应该是一个接受 propscontext 的函数,我们将在稍后讨论。此外,我们从 setup 返回的所有内容都将暴露给组件的其余部分 (计算属性、方法、生命周期钩子等等) 以及组件的模板。

让我们添加 setup 到我们的组件中:

// src/components/UserRepositories.vue

export default {  components: { RepositoriesFilters, RepositoriesSortBy, RepositoriesList },  props: {    user: { type: String }  },  setup(props) {    console.log(props) // { user: '' }

    return {} // 这里返回的任何内容都可以用于组件的其余部分  }  // 组件的“其余部分”}

现在让我们从提取第一个逻辑关注点开始 (在原始代码段中标记为“1”)。

  1. 从假定的外部 API 获取该用户名的仓库,并在用户更改时刷新它

我们将从最明显的部分开始:

  • 仓库列表
  • 更新仓库列表的函数
  • 返回列表和函数,以便其他组件选项可以访问它们
// src/components/UserRepositories.vue `setup` functionimport { fetchUserRepositories } from '@/api/repositories'

// 在我们的组件内setup (props) {  let repositories = []  const getUserRepositories = async () => {    repositories = await fetchUserRepositories(props.user)  }

  return {    repositories,    getUserRepositories // 返回的函数与方法的行为相同  }}

这是我们的出发点,但它还不能工作,因为我们的 repositories 变量是非响应式的。这意味着从用户的角度来看,仓库列表将保持为空。我们来解决这个问题!

ref 的响应式变量

在 Vue 3.0 中,我们可以通过一个新的 ref 函数使任何响应式变量在任何地方起作用,如下所示:

<div class="template-m-wrap">counter ---> {{ counter }}div></template>

组合筛选vue_Vue 3 组合式API介绍相关推荐

  1. vue3组合式api

    文章目录 组合式API介绍 什么是组合式 API? 为什么要有组合式 API? 更好的逻辑复用 更灵活的代码组织 Option Api Option Api的缺陷 Composition Api 更好 ...

  2. vuejs中组件的两种不同的编写风格-选项式API及组合式API

    前言 随着vue3的逐渐稳定,以及周边生态的完善,现在vue3已经成为默认的使用方式了的 所以,对于一个前端开发者,Vue2与Vue3都得要会,在vue3中新增很多东西,比如:Fragment,Tel ...

  3. Vue3中的API——选项式API、组合式API

    Vue 的组件可以按两种不同的风格书写:选项式 API 和组合式 API. 对于熟悉Vue2的人来说,选项式api是一个很好的选择,但Vue3提供的组合式api对于代码复用效果更为突出.博主之前是用的 ...

  4. Nat. Mach. Intell.| 机器学习显著降低药物组合筛选成本

    今天给大家介绍2019年12月发表在Nature Machine Intelligence的论文"Prediction of drug combination effects with a ...

  5. Vue3.0 组合式 API 分析与实践

    本文带大家深入理解组合式 API 的设计详情,同时加入我们的实践经验总结. 01 背景 Vue3.x 版本的出现带来了许多令人眼前一亮的新特性,其中组合式 API(Composition API),一 ...

  6. 【Go API 开发实战 2】RESTful API 介绍

    RESTful API 介绍 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数或者接口,目的是提供应用程序与开发人员基于某软件或硬件得 ...

  7. Vue3笔记_02setup与常用的Composition API(组合式API)

    目录 setup setup的执行时机 [1]定义数据和方法 vue2中定义数据和方法 vue3中定义数据和方法 语法 示例-返回值为一个对象 示例-返回值为一个渲染函数 注意点 数据-响应式数据 r ...

  8. 【Vue3】vue3中组合式Api的setup写法快速入门上手起步

    要使用Vue3,那必须得会setup,因为setup是组合式API表演的舞台. 安装volar 如果你的VScode之前安装有vuter插件,请先把他禁用或者卸载掉,然后安装volar. 因为,vut ...

  9. Linux内核scatterlist API介绍 DMA SG搬移

    Linux内核scatterlist API介绍 1. 前言 我们在那些需要和用户空间交互大量数据的子系统(例如MMC[1].Video.Audio等)中,经常看到scatterlist的影子.对我们 ...

最新文章

  1. 强化学习最新作品:谷歌最新思想、MIT新书推荐、Sutton经典之作!
  2. 双花证明已实现,BCH安全的0确认交易还远吗?
  3. 数据算法——Spark的TopN实现
  4. Maven学习(三) -- 仓库
  5. flutter布局-8-animated_icons动画图片
  6. 博士申请 | 上海交通大学叶南阳助理教授招收机器学习方向博士生
  7. 狄克斯特拉算法(入门)
  8. mysql索引实现原理
  9. asp.net表单提交方法GET\POST
  10. python指定进程断网_python通过scapy模块进行arp断网攻击
  11. 在windows下挂载nfs文件系统
  12. python 如何获取文件夹下所有的目录。
  13. oracle11gr2安装测试,Ubuntu 11.10下安装Oracle 11g R2 详解(本人测试通过) (转)
  14. win7 java修复工具哪个好_DLL修复工具哪个好
  15. android手机截图功能,手机截屏怎么弄?安卓手机怎么截屏?
  16. 数据增强-亮度-对比度-色彩饱和度-色调-锐度 不改变图像大小 --增加ssd目标框xml文件的同步处理方法。
  17. STM32F103C8T6和STM32F103C6T6区别
  18. Graphics2D 使用详解 【转】
  19. linux下文件的total是啥,linux中,ls -l命令显示的total的含义。
  20. 解决react项目启动invalid host header问题

热门文章

  1. Java面向对象特征介绍
  2. linux防火墙 限制端口,Linux开启防火墙并限制开放端口
  3. svg text换行_5分钟看懂SVG反爬虫原理与绕过实战 | 知了干货分享
  4. abaqus的python安装文件在哪_python、abaqus执行脚本路径
  5. 万字讲解API网关的来龙去脉
  6. 如何用 SpringBoot 实现并发登录人数控制(附代码)
  7. 蓝桥杯-安慰奶牛(java)
  8. Hibernate中的核心接口query接口用法
  9. 表单开发(二):获取单选按钮,多行文本框,下拉菜单,捆绑元素数据,用户注册
  10. python入门基础系列_Python3基础系列-基本入门语法