UNIAPP如何自定义全局方法?

最近再写uniapp的时候,发现工作中有些小伙伴对于如何定义一些全局方法不是很清楚,无法清晰地去封装和完善公共方法,这里简单的介绍一下

技术栈:uniapp + vue3 + vite + ts(typescript)

一 定义一个简单的hooks

1、什么是hook(钩子机制,钩子函数)?

在JavaScript和前端开发中,Hooks通常与React框架中的Hooks概念相关联,但在其他框架或环境中,我们可以通过其他方式模拟或实现类似的功能。

钩子函数一般是一种再特定时间或者函数执行前后插入的自定义代码的技术,允许扩展或者修改原有的程序的行为

包括:函数修改、状态管理,事件拦截等

比如:使用uniapp去二次封装一个全局的提示 hooks/useToast.ts

TypeScript 复制代码
const defaultToastOpts: UniApp.ShowToastOptions = {
  icon: 'none',
  mask: true,
  duration: 1500,
}

export const useCommon  = () => {
	const Toast = (arg: string | UniApp.ShowToastOptions) => {
		if (typeof arg === 'string') { 
			uni.showToast({ title: arg })
		} else {
			const opts: object = {
			    title: arg.title,
			    ...defaultToastOpts,
			    ...arg,
			}
			return uni.showToast(opts)
		}
	}
	
	Toast.loading = () => uni.showToast({ icon: 'loading', duration: 120000, mask: true         })
	Toast.clear = () => uni.hideToast()
	
	
	return {
		Toast
	}
}

二、定义全局引入的函数

/types/auto-import.d.ts

TypeScript 复制代码
export {}
declare global {
    ...
    const useCommon: typeof import('../hooks/useToast')['useToast']
    ...
}

import { UnwrapRef } from 'vue'
declare module 'vue' {
    ...
    readonly useCommon: UnwrapRef<typeof import('../hooks/useToast')['useToast']>
    ...
}

三、如何配置自定引入

vite.config.ts

TypeScript 复制代码
import uni from "@dcloudio/vite-plugin-uni";
import AutoImport from 'unplugin-auto-import/vite'

export default defineConfig({
    ...
	plugins: [
		uni(),
        AutoImport({
		    imports: ['vue', 'uni-app'],
		    dts: 'src/types/auto-import.d.ts',
		    dirs: ['src/hooks'], // 自动导入 hooks
		    eslintrc: { enabled: true },
		    vueTemplate: true, // default false
		}),
    ]
    ...
})

四、如何结合场景使用?

TypeScript 复制代码
<script setup lang="ts">
    const { Toast } = useToast()
    onMounted(() => {
        Toast('这是一个提示')
        Toast.loadin()
        setTimeout(() => {
            Toast.clear()
        }, 2000)
    })
</script>

总结:简简单单实现,有时候代码并不是很多,也能实现一个小功能。

个人的一点小想法,请多多指教!!!

相关推荐
To_OC3 小时前
踩了个 TS 的坑之后,我终于把 type 和 interface 掰明白了
前端·react.js·typescript
万少3 小时前
给 DeepSeek Harness 装个"应用商店":一条命令,595 个插件随你逛
前端·javascript·后端
小爬的老粉丝5 小时前
JavaScript 纯前端预览 WPS:先识别容器,再路由解析器
前端·javascript·wps
mCell6 小时前
用 Cordis 从零构建一个 Mini DeepSeek Harness
typescript·agent·deepseek
满栀5857 小时前
状态管理:Redux、Vuex、Pinia 核心区别
前端·javascript·typescript
大龄码农有梦想9 小时前
Vue + BPMN.js + Camunda:搭建企业级流程设计器完整实践
javascript·vue.js·流程设计器·bpmn.js·bpmn·流程审批·工作流设计器
Eloudy9 小时前
ReAct 原理简介
前端·javascript·人工智能·react.js·agent·gpu
ZJU_统一阿萨姆10 小时前
【DSH】如何将 DeepSeek Harness 嵌入生产环境?万字解构 DeepSeek Agent Harness 的运行机制与安全边界
前端·javascript·安全
苏灿烤鱼11 小时前
公司**不可计算,就自己做操作系统
rust·typescript·agent
夏天一说说11 小时前
API 安全】API-Pentest:基于 JS 分析 + AI Agent 的自动化 API 渗透测试工具实战指南
javascript·人工智能·安全·api