Vue3 【仿 react 的 hook】封装 useLocation

简介: Vue3 【仿 react 的 hook】封装 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>

目录
相关文章
|
10月前
|
前端开发 JavaScript 网络架构
react对antd中Select组件二次封装
本文介绍了如何在React中对Ant Design(antd)的Select组件进行二次封装,包括创建MSelect组件、定义默认属性、渲染Select组件,并展示了如何使用Less进行样式定义和如何在项目中使用封装后的Select组件。
332 2
react对antd中Select组件二次封装
|
11月前
|
JavaScript 前端开发 API
[译] 用 Vue 3 Composition API 实现 React Context/Provider 模式
[译] 用 Vue 3 Composition API 实现 React Context/Provider 模式
|
10月前
|
前端开发
React添加路径别名alias、接受props默认值、并二次封装antd中Modal组件与使用
本文介绍了在React项目中如何添加路径别名alias以简化模块引入路径,设置组件props的默认值,以及如何二次封装Ant Design的Modal组件。文章还提供了具体的代码示例,包括配置Webpack的alias、设置defaultProps以及封装Modal组件的步骤和方法。
201 1
React添加路径别名alias、接受props默认值、并二次封装antd中Modal组件与使用
|
9月前
|
前端开发
react 封装防抖
react 封装防抖
70 4
|
10月前
封装react-antd-table组件参数以及方法如rowSelection、pageNum、pageSize、分页方法等等
文章介绍了如何封装React-Antd的Table组件,包括参数和方法,如行选择(rowSelection)、页码(pageNum)、页面大小(pageSize)、分页方法等,以简化在不同表格组件中的重复代码。
208 0
|
11月前
|
前端开发
React 中的 Hook 概念
【8月更文挑战第31天】
156 0
|
前端开发
Vue3 【仿 react 的 hook】封装 useTitle
Vue3 【仿 react 的 hook】封装 useTitle
119 0
|
2月前
|
缓存 前端开发 数据安全/隐私保护
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
173 68
|
2月前
|
缓存 前端开发 Java
在 React 中,组合组件和高阶组件在性能方面有何区别?
在 React 中,组合组件和高阶组件在性能方面有何区别?
154 67
|
2月前
|
前端开发 JavaScript 安全
除了高阶组件和render props,还有哪些在 React 中实现代码复用的方法?
除了高阶组件和render props,还有哪些在 React 中实现代码复用的方法?
162 62