Vue3 【实战】封装 useLocation

在这里插入图片描述

技术要点

  • 通过 Vue3 的组合式API 仿写 react 中的 hook

代码实现

封装

hooks/useLocation.js

import { reactive, onMounted, toRefs } from 'vue'

// 模拟异步获取
function getLocation(fail) {
    return new Promise((resolve) => {
        setTimeout(() => {
            if (fail) {
                // 模拟失败
                resolve({ errno: 1, msg: fail })
            } else {
                // 模拟成功
                resolve({ errno: 0, data: { x: 100, y: 200 } })
            }
        }, 1000)
    })
}

function useLocation() {
    const info = reactive({
        isLoading: true,
        data: {},
        errMsg: ''
    })

    onMounted(async () => {
        const res = await getLocation() // 成功
        // const res = await getLocation('失败信息') // 失败
        if (res.errno === 0) {
            info.data = res.data
        } else {
            info.errMsg = res.msg
        }
        info.isLoading = false
    })

    return toRefs(info)
}

export default useLocation

使用

<template>
  <div v-if="isLoading">loading</div>
  <div v-else>
    <div v-if="errMsg">{{ errMsg }}</div>
    <div v-else>{{ JSON.stringify(data) }}</div>
  </div>
</template>

<script setup>
import useLocation from "../hooks/useLocation.js";

const { isLoading, data, errMsg } = useLocation();
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/683911.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3 使用audio播放语音+监听播放语音完成事件

需求&#xff1a;输入一段文字&#xff0c;点击语音框&#xff0c;将本地语音&#xff08;提前准备好的&#xff09; 播放出来 播放中效果 代码 <div class"listConAI" click"handleOpenSpeech" ><imgsrc"../../../../assets/images/blueo…

剪画小程序:自媒体必备神器:【视频翻译】自动识别语言、翻译、配音,让外语视频秒变母语!

Hello&#xff0c;大家好呀&#xff01;我是不会画画的小画~ 今天给大家带来一款敲实用的视频翻译工具一一 小程序【剪画】 我们有很小伙伴在学习他国语言时&#xff0c;最大的障碍就是语言的问题了&#xff0c;想要 理解其中的内容&#xff0c;在这之前要下很大的功夫去掌握…

Rust基础学习-Rust中的文件操作

文件结构 在Rust中&#xff0c;std::fs::File 结构体代表一个文件。它允许我们对文件执行读/写操作。文件 I/O 是通过提供与文件系统交互的功能的 std::fs 模块执行的。 File 结构体中的所有方法都返回std::io::Result的变体&#xff0c;或者简单地是 Result 枚举。这里会涉及…

猫熊超市管理系统

import java.util.Scanner;//增加商品类 //此类用来录入一个商品的所有属性&#xff0c;并作为结果对其返回 public class Add {public Goods add1() {Scanner scanner new Scanner(System.in);System.out.println("请输入商品名称");String name scanner.next();S…

android自定义系统广播 系统与app进行通信

使用场景 我们的定制软件需要在按下电源键时监听并播报软件信息&#xff0c;像我们之前做法是监听屏幕的开关 android.intent.action.SCREEN_ON 广播可以达到要求&#xff0c;但是定制系统CPU熄屏不休眠导致这个广播被拦截收不到了&#xff0c;所以我们就追踪到系统代码的Key…

resultType的类型错误

resultType的类型错误&#xff0c;不能是List而应该是对应的返回Bean对象的类型&#xff0c;VO 这里是引用 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: Error querying database. Cause: java.lang…

木叶飞舞之【机器人ROS2】篇章_第四节、ROS2非常简单的传参方式--利用NodeOptions和get_parameter方法

系列文章目录 木叶飞舞之【机器人ROS2】篇章_第一节、ROS2 humble及cartorgrapher安装 木叶飞舞之【机器人ROS2】篇章_第二节、turtlebot3安装 木叶飞舞之【机器人ROS2】篇章_第三节、给turtlebot3安装realsense深度相机 木叶飞舞之【机器人ROS2】篇章_第四节、ROS2非常简单的…

halcon 算子 get_grayval_interpolated BiCubic 插值验证

测试发现 halcon BiCubic基函数中的a-1.0

自适应手机端+电脑端企业建站网站系统源码 760多建站模版任意选择 带完整的安装代码包以及搭建教程

系统概述 随着互联网的迅猛发展&#xff0c;企业对于网站的需求日益增长。传统的建站方式往往存在着成本高、周期长、维护困难等问题&#xff0c;难以适应快速变化的市场环境。为了解决这些难题&#xff0c;我们的开发团队深入研究企业建站的痛点和需求&#xff0c;结合先进的…

【K8s】专题四(6):Kubernetes 控制器之 Job

以下内容均来自个人笔记并重新梳理&#xff0c;如有错误欢迎指正&#xff01;如果对您有帮助&#xff0c;烦请点赞、关注、转发&#xff01;欢迎扫码关注个人公众号&#xff01; 目录 一、基本介绍 二、工作原理 三、相关特性 四、资源清单&#xff08;示例&#xff09; 五…

如何在 Mac 上使用 Windows 版 Excel 的全部功能

作为 Mac 用户&#xff0c;你是否怀念 Excel 的一些关键功能&#xff1f;是不是在 Mac 版 Excel 中找不到全面的 VBA、Active X 和表单控件、智能标签、Power Pivot 等关键工具&#xff1f;Mac 用户们&#xff0c;其实你不必错过这些功能。终极解决方案就是&#xff1a;通过 Pa…

为啥要在虚拟机上搞开发呢:一个码农的Mac折腾史

作为一个码农&#xff0c;我一直在不停地学习新技术&#xff0c;适应新环境。但说实话&#xff0c;我最大的挑战之一是那天我决定从 Windows 转投 Mac 的阵营。 一开始&#xff0c;我还挺犹豫的。 Windows 和 Linux 一直是我求学和工作的得力伙伴。我在那个熟悉的世界里觉得很…

激发AI创新潜能,OPENAIGC开发者大赛赛题解析

人工智能&#xff08;AI&#xff09;的飞速发展&#xff0c;特别是AIGC、大模型、数字人技术的成熟&#xff0c;不仅改变了数据处理和信息消费的方式&#xff0c;也为企业和个人提供了前所未有的机遇。在这种技术进步的背景下&#xff0c;由联想拯救者、AIGC开放社区、英特尔共…

内地户口转香港身份的7种途径!2024年怎么同时拥有2个身份?一篇说明白

很多人还不知道怎么同时拥有内地身份和香港身份&#xff0c;这里一次性说明白&#xff0c;不同背景情况及政策有可能随时变化&#xff0c;这里分享最近拿香港身份的7种途径。 #01 优才『香港优秀人才计划』 获批准的申请人无须在来港定居前先获得本地雇主聘任。所有申请人均必…

淘宝扭蛋机小程序:解锁个性化扭蛋新体验

在追求个性化的今天&#xff0c;淘宝扭蛋机小程序以其独特的功能和设计&#xff0c;为我们解锁了全新的个性化扭蛋新体验。 1. 定制化扭蛋选择 淘宝扭蛋机小程序提供了多种定制化扭蛋选择&#xff0c;让你根据自己的喜好和需求&#xff0c;挑选心仪的扭蛋机。无论是喜欢动漫角…

界面控件Telerik UI for WPF中文教程 - 用RadSvgImage升级应用程序UI

Telerik UI for WPF拥有超过100个控件来创建美观、高性能的桌面应用程序&#xff0c;同时还能快速构建企业级办公WPF应用程序。UI for WPF支持MVVM、触摸等&#xff0c;创建的应用程序可靠且结构良好&#xff0c;非常容易维护&#xff0c;其直观的API将无缝地集成Visual Studio…

EE trade:通货膨胀对老百姓意味着什么

通货膨胀&#xff0c;是经济领域中的一个常见现象&#xff0c;对社会各阶层尤其是普通老百姓的生活产生了深远影响。理解通货膨胀对老百姓的真实含义&#xff0c;可以帮助我们更好地应对日常生活的变化与挑战。 1. 生活成本的上升 最直接的影响体现在生活成本上。通货膨胀会导致…

线性模型-分类

一、线性判别分析LDA 线性判别分析是一种经典的线性学习方法&#xff0c;在二分类问题上最早是Fisher提出的&#xff0c;亦称为Fisher判别分析。 Fisher判别分析是一种用于降维和分类的统计方法&#xff0c;旨在找到可以最好区分不同类别的特征。它基于类内方差和类间方差的比…

[数据集][目标检测]医疗防护服检测数据集VOC+YOLO格式649张7类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;649 标注数量(xml文件个数)&#xff1a;649 标注数量(txt文件个数)&#xff1a;649 标注类别…

ChatGLM 4本地部署指南(Docker容器版)

GLM-4V-9B 是智谱 AI 推出的最新一代预训练模型 GLM-4 系列中的开源多模态版本。 GLM-4V-9B 具备 1120 * 1120 高分辨率下的中英双语多轮对话能力&#xff0c;在中英文综合能力、感知推理、文字识别、图表理解等多方面多模态评测中&#xff0c;GLM-4V-9B 都表现出卓越性能。 本…