赞
踩
之前在学习 React Hooks 的过程中,看到一篇外网文章,通过 Hooks 来请求数据,并将这段逻辑抽象成一个新的 Hooks 给其他组件复用,我也在我的博客里翻译了一下:《在 React Hooks 中如何请求数据?》,感兴趣可以看看。虽然是去年的文章,在阅读之后一下子就掌握了 Hooks 的使用方式,而且数据请求是在业务代码中很常用的逻辑。
Vue 3 已经发布一段时间了,其组合 API 多少有点 React Hooks 的影子在里面,今天我也打算通过这种方式来学习下组合 API。
为了快速启动一个 Vue 3 项目,我们直接使用当下最热门的工具 Vite 来初始化项目。整个过程一气呵成,行云流水。
npm init vite-app vue3-app
# 打开生成的项目文件夹cd vue3-app# 安装依赖npm install# 启动项目npm run dev
我们打开 App.vue
将生成的代码先删掉。
接下来我们将通过 Hacker News API 来获取一些热门文章,Hacker News API返回的数据结构如下:
- {
- "hits": [ {
- "objectID": "24518295", "title": "Vue.js 3", "url": "https://github.com/vuejs/vue-next/releases/tag/v3.0.0", }, {...}, {...}, ]}
我们通过 ui > li
将新闻列表展示到界面上,新闻数据从 hits
遍历中获取。
- <template> <ul> <liv-for="item of hits":key="item.objectID" > <a :href="item.url">{
- {item.title}}a> li> ul>template><script>import { reactive } from 'vue'export default {
- setup() {
- const state = reactive({
- hits: [] })return state }}script>
在讲解数据请求前,我看先看看 setup()
方法,组合 API 需要通过 setup()
方法来启动,setup()
返回的数据可以在模板内使用,可以简单理解为 Vue 2 里面 data()
方法返回的数据,不同的是,返回的数据需要先经过 reactive()
方法进行包裹,将数据变成响应式。
在 Vue 2 中,我们请求数据时,通常需要将发起请求的代码放到某个生命周期中(created
或 mounted
)。在 setup()
方法内,我们可以使用 Vue 3 提供的生命周期钩子将请求放到特定生命周期内,关于生命周期钩子方法与之前生命周期的对比如下:
可以看到,基本上就是在之前的方法名前加上了一个 on
,且并没有提供 onCreated
的钩子,因为在 setup()
内执行就相当于在 created
阶段执行。下面我们在 mounted
阶段来请求数据:
- import { reactive, onMounted } from 'vue'export default {
- setup() {
- const state = reactive({
- hits: [] }) onMounted(async () => {
- const data = await fetch( 'https://hn.algolia.com/api/v1/search?query=vue' ).then(rsp => rsp.json()) state.hits = data.hits }) return state }}
最后效果如下:
Hacker News 的查询接口有一个 query 参数,前面的案例中,我们将这个参数固定了,现在我们通过响应式的数据来定义这个变量。
<template> <input type="text" v-model="query" /> <
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。