惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
D
Docker
IT之家
IT之家
博客园_首页
罗磊的独立博客
V
V2EX
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
美团技术团队
Y
Y Combinator Blog
博客园 - 聂微东
量子位
阮一峰的网络日志
阮一峰的网络日志
GbyAI
GbyAI
Microsoft Security Blog
Microsoft Security Blog
博客园 - Franky
Martin Fowler
Martin Fowler
Jina AI
Jina AI
大猫的无限游戏
大猫的无限游戏
C
Check Point Blog
月光博客
月光博客
G
Google Developers Blog
B
Blog
T
The Blog of Author Tim Ferriss
爱范儿
爱范儿

Mengke's blog - Mengke's coding journey

年轻不是健康的免死金牌 深圳工作机会,前端 2025 年终总结 Skill 不是 MCP 的替代品:我理解的渐进式披露与选型原则 独立开发者如何开具发票 香港银行卡开户完整指南(2025年9月最新) 招商银行储蓄卡微信动账提醒恢复方法 再谈 MCP - Model Context Protocol(MCP)详解和开发教程 Get Human-Readable "Time Ago" in TypeScript 以「asset-price-mcp」为例,从 0 开发 MCP Server Model Context Protocol (MCP) 快速开始 DeepSeek + Dify 搭建本地知识库 An elegant solution for implementing optional property types using TypeScript 2024 年终总结 Quickly Create a Fullscreen WebView with Autoplay Support for Testing 以数字开头的 ID 在 querySelector 中的处理 String casing utilities in JavaScript Check if a string is a valid color Simple Event-Emitter/PubSub pattern Find which process is running on a certain port and kill it Markdown Code block's basic and advanced syntaxes Common npm commands to use locally Pnpm aliases How to safely rename a case sensitive file/directory in a git repo? A custom hooks to use an async effect A custom hooks to use local storage state 🤩 Mengke'blog 上线的这一年 🗼 五月底去了一趟日本,记录一下我的游记和攻略 网站性能优化:如何高效预加载大型静态资源 闰年之约 - 2024年2月29日
尝鲜 Vue 3.0 Combination API
Mengke · 2020-09-07 · via Mengke's blog - Mengke's coding journey

Vue 3.0 即将发布,我们已经可以尝试一些新版本中带来的新功能,比如 Composition-API 组合式API。如果你了解过 React 的 Hooks,那么当你看到组合式API时一定不会感到陌生。组合式API受到了 React Hooks 很大的启发。

Vue 非常易于使用,并且有非常出色的 API,对于初学者来说配合官方文档很容易就可以理解 Vue 的语法。但在国内一些大型的项目可能不会首选 Vue 去开发,因为当组件越来越大的时候会变得很难维护,很难找到一个变量在哪被定义又是在哪被使用。Vue2 中也有一些解决方法,比如mixin、HOC、作用域插槽等等,但是都不能非常完美的去解决这个问题。

说到 mixin,其实 mixin 非常简单,我们可以通过它来把一些公共的数据、方法等等进行抽离后合并到一个组件。但当项目中的 mixin 越来越多的时候你就会发现命名冲突的可能性会变得很大,某些状态和方法的来源恨不清晰。

组合式API可以很完美的解决这个问题。

Demo1

可以使用 Vue-CLI 搭建一个 Vue3 的项目,也可以直接下载 @vue/composition-api 包来使用。

main.js 文件中 use 组合式API:

从一个计数器的小案例开始。新建一个 Count.vue

在 vue3 中有一个新的方法 setup()。data、computed等属性都需要放到 setup 中,setup 返回的是一个对象,该对象包含在组件中应该可用的所有内容。

另外还使用了两个函数**reactive()computed()**。reactive 与 Vue 2 中的 Vue.observable 等效。computed() 是创建计算属性的另一种方式,除此之外与2没有区别。

然后可以在 App.vue 中导入 Count.vue

这是一个很简单的 demo。

Demo2

让我们来继续尝试做一些更好玩的事情。一个可以从随机狗狗网站https://dog.ceo中获取狗狗照片的功能。

创建一个 useApi 函数,他的状态有:dataapi_status,还有一个 initFetch 功能。useApi 接收 url 和 options 两个参数。我们将使用它从 https://dog.ceo 提供的 API 中提取随机的狗狗照片。创建一个 Dog.vue 组件,并添加如下代码:

这里使用到了 toRefs(),稍后会详细讲。 在 useApi 函数中,我们声明了state 包括 data 和 api_status。此外,initFetch 功能是更新 api_status 和发送请求。

接下来,我们检查 options 对象是否具有 fetchImmediately 属性。它指示在创建组件时是否应初始化API调用。最后,我们返回一个响应式 state 和 initFetch 函数的对象 。我们没有直接返回 state,而是使用 toRefs 进行包装。使用 toRefs 包装每个值,可以让他们具有响应性。

如前所述,我们可以从 useApi 中解构所需的属性而不会失去响应性。此外,从 setup 返回的对象已重命名了属性。最后加上模板:

这些模板 divs 取决于 api_status 来显示或隐藏。由于传递fetchImmediately: true 给 useApi,因此会在初始化时发送一条请求,您可以通过单击 Fetch dog 按钮来再一次发起请求。

你可以在 Github 上下载完整 demo 代码。