Skip to content

Hooks

一组实用的工具函数集合,用于简化开发流程、提升开发效率。它们提供了组件引用管理、缓存控制等常用功能的封装,让开发者能够以更简洁的方式实现复杂的功能需求。

useRefs

便捷的组件实例管理工具,用于快速获取和操作组件引用。

API

方法名参数返回值说明
data-object存储所有 ref 的响应式对象
setname: stringfunction生成 ref 绑定函数,用于在模板中设置组件引用
getname: stringComponentPublicInstance | null获取指定名称的组件实例
getExposed<T>name: string, key: stringT | null获取组件实例通过 defineExpose 暴露的属性
call<T>name: string, method: stringT调用组件实例暴露的方法并返回结果
callMethodname: string, method: stringvoid调用组件实例暴露的方法,无返回值
openname: stringvoid调用组件的 open 方法
closename: stringvoid调用组件的 close 方法

使用示例

html
<template>
	<test-component :ref="refs.set('test')"></test-component>

	<button @click="get">获取数据</button>
</template>

<script lang="ts" setup>
	import { useRefs } from "@/.cool";

	const refs = useRefs();

	// 获取组件数据
	function get() {
		// 获取组件实例
		const testInstance = refs.get("test");

		// 获取组件暴露的属性
		const num = refs.getExposed("test", "num");

		// 调用组件方法并获取返回值
		const result = refs.call("test", "getData");

		// 调用组件方法,无返回值
		refs.callMethod("test", "updateStatus");
	}
</script>

useCache

智能组件重新渲染工具,通过监听依赖变化自动更新组件的 key 值。

使用场景

  • 当组件需要根据特定状态完全重新渲染时
  • 重置组件内部状态到初始值
  • 强制刷新复杂的子组件

使用示例

html
<template>
	<complex-component :key="cache.key" :data="formData"></complex-component>

	<button @click="toggleStatus">切换状态</button>
	<button @click="incrementNum">增加数字</button>
</template>

<script lang="ts" setup>
	import { ref } from "vue";
	import { useCache } from "@/.cool";

	const status = ref(false);
	const num = ref(0);
	const formData = ref({});

	// 监听 status 和 num 的变化,自动生成新的 key
	const { cache } = useCache(() => [status.value, num.value]);

	function toggleStatus() {
		status.value = !status.value;
		// 组件会自动重新渲染
	}

	function incrementNum() {
		num.value++;
		// 组件会自动重新渲染
	}
</script>

useLongPress

长按手势处理工具,支持自定义触发间隔和回调函数。

特性

  • 支持自定义长按触发间隔
  • 自动处理触摸事件的开始和结束
  • 支持连续触发回调

使用示例

html
<template>
	<view @touchstart="handleTouchStart" @touchend="longPress.stop" @touchcancel="longPress.stop">
		长按我试试
	</view>

	<view>计数: {{ count }}</view>
</template>

<script lang="ts" setup>
	import { ref } from "vue";
	import { useLongPress } from "@/.cool";

	const longPress = useLongPress();
	const count = ref(0);

	function handleTouchStart() {
		longPress.start(() => {
			// 每100ms执行一次,实现连续递增效果
			count.value++;
			console.log("长按触发", count.value);
		}, 100); // 可选:自定义触发间隔,默认100ms
	}
</script>