UG666

UG666 UI

@ug666/vue Composables

Composables 组合式函数

集中展示 9 个 Vue composables,覆盖表单、防抖、复制、分页、本地存储与通知等业务高频场景。

导入方式

import { useDebounce, useLocalStorage, useMediaQuery, useClickOutside, useCopyToClipboard, useToggle, usePagination, useForm, toast } from '@ug666/vue'

useDebounce

对输入值进行防抖处理。

输入后等待 500ms 更新结果

实时输入:button
防抖结果:button
const keyword = ref('')
const debouncedKeyword = useDebounce(keyword, 500)

useLocalStorage + useMediaQuery

持久化偏好设置,并感知屏幕断点。

localStorage 当前值:light
桌面断点是否命中:否
const [theme, setTheme] = useLocalStorage('docs-theme', 'light')
const isDesktop = useMediaQuery('(min-width: 1024px)')

useClickOutside + useCopyToClipboard

常用于关闭弹层或复制业务链接。

点击此区域外部后,下方状态会变为“已触发”。

外部点击状态:等待点击外部

https://ui.ug666.top/vue
const panelRef = useClickOutside<HTMLDivElement>(() => {
  isOpen.value = false
})
const { copied, copy } = useCopyToClipboard()
await copy('https://ui.ug666.top/vue')

useToggle + usePagination

适合控制可见性状态与列表分页逻辑。

面板状态:已展开

当前第 2 页,共 9 页,偏移量 10

const { value, toggle, setOn, setOff } = useToggle(false)
const { page, totalPages, offset, setPage } = usePagination({ total: 87, pageSize: 10 })

useForm

管理字段值、错误信息与重置逻辑。

这里可以继续组合其他表单组件。

当前表单值:{"name":"","email":"","role":"designer"}
错误信息:{}
const form = useForm({ name: '', email: '', role: 'designer' })

toast / useToast

统一处理全局成功、错误与信息通知。

等待触发通知
toast.success('保存成功')
toast.error('发布失败')
toast.info('已进入预览模式')