@ug666/vue Composables
Composables 组合式函数
集中展示 9 个 Vue composables,覆盖表单、防抖、复制、分页、本地存储与通知等业务高频场景。
导入方式
import { useDebounce, useLocalStorage, useMediaQuery, useClickOutside, useCopyToClipboard, useToggle, usePagination, useForm, toast } from '@ug666/vue'useDebounce
对输入值进行防抖处理。
输入后等待 500ms 更新结果
实时输入:button
防抖结果: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('已进入预览模式')