useEffect 和 Vue3 API 对比
useCallback
和 useMemo
在某种程度上类似于 Vue 3 中的 computed
,而 useEffect
则包含了 Vue 3 中的 onMounted
、onUpdated
、watchEffect
和 watch
等 API 的功能。以下是对这些钩子和 Vue 3 中对应 API 的详细对比和解释:
useCallback
和 useMemo
类似于 Vue 3 中的 computed
useCallback
useCallback
用于记忆化回调函数,避免在每次渲染时创建新的函数实例。
tsx
import { useCallback } from "preact/hooks";
const memoizedCallback = useCallback(() => {
// 回调函数逻辑
}, [依赖项]);
useMemo
useMemo
用于记忆化计算结果,避免在每次渲染时重新计算。
tsx
import { useMemo } from "preact/hooks";
const memoizedValue = useMemo(() => {
// 计算逻辑
return 计算结果;
}, [依赖项]);
Vue 3 中的 computed
在 Vue 3 中,computed
用于创建计算属性,类似于 useMemo
和 useCallback
的功能。
javascript
import { computed } from "vue";
const count = ref(0);
const doubleCount = computed(() => count.value * 2);
useEffect
类似于 Vue 3 中的 onMounted
、onUpdated
、watchEffect
和 watch
useEffect
useEffect
用于在组件渲染后执行副作用。它可以模拟 Vue 3 中的 onMounted
、onUpdated
、watchEffect
和 watch
。
tsx
import { useEffect } from "preact/hooks";
// 模拟 onMounted
useEffect(() => {
// 组件挂载时执行
console.log("Component mounted");
}, []);
// 模拟 onUpdated
useEffect(() => {
// 组件更新时执行
console.log("Component updated");
});
// 模拟 watchEffect
useEffect(() => {
// 依赖项变化时执行
console.log("Dependencies changed");
}, [依赖项]);
// 模拟 watch
useEffect(() => {
const handle = setInterval(() => {
console.log("Interval running");
}, 1000);
return () => clearInterval(handle); // 清理副作用
}, []);
Vue 3 中的 onMounted
、onUpdated
、watchEffect
和 watch
onMounted
:在组件挂载时执行。onUpdated
:在组件更新时执行。watchEffect
:在依赖项变化时执行。watch
:监听特定的响应式数据变化。
javascript
import { onMounted, onUpdated, watchEffect, watch, ref } from "vue";
const count = ref(0);
// 模拟 onMounted
onMounted(() => {
console.log("Component mounted");
});
// 模拟 onUpdated
onUpdated(() => {
console.log("Component updated");
});
// 模拟 watchEffect
watchEffect(() => {
console.log("Dependencies changed");
});
// 模拟 watch
watch(count, (newValue, oldValue) => {
console.log(`Count changed from ${oldValue} to ${newValue}`);
});
总结
useCallback
和useMemo
:类似于 Vue 3 中的computed
,用于记忆化回调函数和计算结果。useEffect
:类似于 Vue 3 中的onMounted
、onUpdated
、watchEffect
和watch
,用于在组件渲染后执行副作用。
通过理解这些钩子和 Vue 3 中对应 API 的对比,你可以更好地在 Preact 和 Vue 3 中管理组件的状态和副作用,从而提高应用的性能和响应速度。