当前位置:   article > 正文

如何取消button的点击特效_Vue 3 的组合 API 如何请求数据?

vue取消按钮j激活效果

前言

之前在学习 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 将生成的代码先删掉。

组合 API 的入口

接下来我们将通过 Hacker News API 来获取一些热门文章,Hacker News API返回的数据结构如下:

  1. {
  2.   "hits": [    {
  3.       "objectID""24518295",      "title""Vue.js 3",      "url""https://github.com/vuejs/vue-next/releases/tag/v3.0.0",    },    {...},    {...},  ]}

我们通过 ui > li 将新闻列表展示到界面上,新闻数据从 hits 遍历中获取。

  1. <template>  <ul>    <liv-for="item of hits":key="item.objectID"    >      <a :href="item.url">{
  2. {item.title}}a>    li>  ul>template><script>import { reactive } from 'vue'export default {
  3.   setup() {
  4. const state = reactive({
  5. hits: []    })return state  }}script>

在讲解数据请求前,我看先看看 setup() 方法,组合 API 需要通过 setup() 方法来启动,setup() 返回的数据可以在模板内使用,可以简单理解为 Vue 2 里面 data() 方法返回的数据,不同的是,返回的数据需要先经过 reactive() 方法进行包裹,将数据变成响应式。

组合 API 中请求数据

在 Vue 2 中,我们请求数据时,通常需要将发起请求的代码放到某个生命周期中(createdmounted)。在 setup() 方法内,我们可以使用 Vue 3 提供的生命周期钩子将请求放到特定生命周期内,关于生命周期钩子方法与之前生命周期的对比如下:

351058e27d826f87062461ce16008c36.png
生命周期

可以看到,基本上就是在之前的方法名前加上了一个 on,且并没有提供 onCreated 的钩子,因为在 setup() 内执行就相当于在 created 阶段执行。下面我们在 mounted 阶段来请求数据:

  1. import { reactive, onMounted } from 'vue'export default {
  2.   setup() {
  3.     const state = reactive({
  4.       hits: []    })    onMounted(async () => {
  5.       const data = await fetch(        'https://hn.algolia.com/api/v1/search?query=vue'      ).then(rsp => rsp.json())      state.hits = data.hits    })    return state  }}

最后效果如下:

85c9c2858d5ba91cf588c32fae36bddc.png
Demo

监听数据变动

Hacker News 的查询接口有一个 query 参数,前面的案例中,我们将这个参数固定了,现在我们通过响应式的数据来定义这个变量。

<template>  <input type="text" v-model="query" />  <
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/257208
推荐阅读
  

闽ICP备14008679号