使用Composition API在Vue3中创建防抖的搜索输入框

简介: 随着Vue3中Composition API的引入,有了编写响应式逻辑的新方法,即ref和reactive方法。在本文中,将展示如何创建一个防抖的ref,该ref将在指定的延迟后才更新值。例如,有一个带有自动完成功能的搜索框,在该字段中搜索查询状态更改后发起API请求,那么防抖的ref就会非常有用。

随着Vue3中Composition API的引入,有了编写响应式逻辑的新方法,即refreactive方法。在本文中,将展示如何创建一个防抖的ref,该ref将在指定的延迟后才更新值。例如,有一个带有自动完成功能的搜索框,在该字段中搜索查询状态更改后发起API请求,那么防抖的ref就会非常有用。

防抖是一种不错的优化方式,如果没有这种方式,则每次点击后都会发起API请求。

实例代码仓库:github.com/QuintionTan…

image.png

开始

为了完成这个实例,将采用Vite创建一个新项目。可以通过运行yarn create @vitejs/app debounced-search 或者npm init @vitejs/app debounced-search,然后选择Vue模板。执行完后将生成基础的项目目录结构。

image.png

src/App.vue

正如上面说的,当搜索框中中输入搜索条件时,可以使用防抖引用来延迟API请求。

在模板中,有一个label、input和包含关键字query的div。完成后,将看到值只有在延迟之后才被更新。在setup方法中,使用useDebouncedRef函数创建一个debounce ref,并传递一个空字符串作为初始值和数值500,500是debounce的延迟。除此之外,还有一个观察器来观察查询ref。这就是可以初始化一个函数来执行发起API请求的地方。

useDebouncedRef.js

下面是组件useDebouncedRef的实现代码:

import { ref, customRef } from "vue";
/**
 *
 * @param {*} fn 回调函数
 * @param {*} delay 延迟毫秒数
 * @param {*} immediate 是否立即执行
 * @returns
 */
const debounce = (fn, delay = 0, immediate = false) => {
    let timeout;
    return (...args) => {
        if (immediate && !timeout) fn(...args);
        clearTimeout(timeout);
        timeout = setTimeout(() => {
            fn(...args);
        }, delay);
    };
};
const useDebouncedRef = (initialValue, delay, immediate) => {
    const state = ref(initialValue);
    const debouncedRef = customRef((track, trigger) => ({
        get() {
            track();
            return state.value;
        },
        set: debounce(
            (value) => {
                state.value = value;
                trigger();
            },
            delay,
            immediate
        ),
    }));
    return debouncedRef;
};
export default useDebouncedRef;

useDebouncedRef.js 文件中有两个方法 deounceuseDebouncedRef 函数。debounce函数实现在指定的延迟时间过后执行回调函数。除了回调函数和延迟时间,它还接受第三个名为immediate的参数,用来指示回调是否应该立即执行。这个函数可以抽象到通用方法文件中,在应用程序的其他部分中调用。

useDebouncedRef 方法中,使用了vue包中的ref方法声明一个新的响应值,使用 customRef方法,来创建一个自定义的 ref,并对其依赖项跟踪和更新触发进行显式控制。它需要一个工厂函数,该函数接收 tracktrigger 函数作为参数,并应返回一个带有 getset 的对象。


相关文章
|
12天前
|
XML JSON API
[1688一件代发]API接口关键词搜索(1688.item_search)
1688 一件代发的关键词搜索 API 接口,可快速从平台海量商品库中查找相关信息。主要参数包括:q(搜索关键字)、start_price 和 end_price(价格区间)、page(页码)、page_size(每页显示数量)、sort(排序方式)及 filter(额外过滤条件)。此接口适用于需要精准定位商品的开发者和商家。
|
15天前
|
JavaScript 前端开发 API
Vue 3新特性详解:Composition API的威力
【10月更文挑战第25天】Vue 3 引入的 Composition API 是一组用于组织和复用组件逻辑的新 API。相比 Options API,它提供了更灵活的结构,便于逻辑复用和代码组织,特别适合复杂组件。本文将探讨 Composition API 的优势,并通过示例代码展示其基本用法,帮助开发者更好地理解和应用这一强大工具。
18 1
|
28天前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索json数据格式示例(API接口)
拍立淘按图搜索API接口为电商平台和购物应用提供了强大的图像搜索功能,能够显著提升用户的购物体验和搜索效率。开发者可以根据自己的需求调用此接口,并处理返回的JSON格式数据来展示推荐商品
|
29天前
|
缓存 JavaScript API
Vue 3的全新Reactivity API:解锁响应式编程的力量
Vue 3引入了基于Proxy的全新响应式系统,提升了性能并带来了更强大的API。本文通过示例详细介绍了`reactive`、`ref`、`computed`、`watch`等核心API的使用方法,帮助开发者深入理解Vue 3的响应式编程。无论你是初学者还是资深开发者,都能从中受益,构建更高效的应用程序。
18 1
|
1月前
|
缓存 JavaScript API
Vue 3的全新Reactivity API:解锁响应式编程的力量
【10月更文挑战第9天】Vue 3的全新Reactivity API:解锁响应式编程的力量
15 3
|
29天前
|
缓存 JavaScript 前端开发
深入理解 Vue 3 的 Composition API 与新特性
本文详细探讨了 Vue 3 中的 Composition API,包括 setup 函数的使用、响应式数据管理(ref、reactive、toRefs 和 toRef)、侦听器(watch 和 watchEffect)以及计算属性(computed)。我们还介绍了自定义 Hooks 的创建与使用,分析了 Vue 2 与 Vue 3 在响应式系统上的重要区别,并概述了组件生命周期钩子、Fragments、Teleport 和 Suspense 等新特性。通过这些内容,读者将能更深入地理解 Vue 3 的设计理念及其在构建现代前端应用中的优势。
29 0
深入理解 Vue 3 的 Composition API 与新特性
|
20天前
|
API
《vue3第四章》Composition API 的优势,包含Options API 存在的问题、Composition API 的优势
《vue3第四章》Composition API 的优势,包含Options API 存在的问题、Composition API 的优势
25 0
|
20天前
|
JavaScript 前端开发 API
《vue3第六章》其他,包含:全局API的转移、其他改变
《vue3第六章》其他,包含:全局API的转移、其他改变
20 0
|
2天前
|
JSON API 数据格式
淘宝 / 天猫官方商品 / 订单订单 API 接口丨商品上传接口对接步骤
要对接淘宝/天猫官方商品或订单API,需先注册淘宝开放平台账号,创建应用获取App Key和App Secret。之后,详细阅读API文档,了解接口功能及权限要求,编写认证、构建请求、发送请求和处理响应的代码。最后,在沙箱环境中测试与调试,确保API调用的正确性和稳定性。
|
14天前
|
供应链 数据挖掘 API
电商API接口介绍——sku接口概述
商品SKU(Stock Keeping Unit)接口是电商API接口中的一种,专门用于获取商品的SKU信息。SKU是库存量单位,用于区分同一商品的不同规格、颜色、尺寸等属性。通过商品SKU接口,开发者可以获取商品的SKU列表、SKU属性、库存数量等详细信息。

热门文章

最新文章