first commit
This commit is contained in:
52
src/hooks/useEffect.ts
Normal file
52
src/hooks/useEffect.ts
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* @Author: 田鑫
|
||||
* @Date: 2024-06-11 14:55:40
|
||||
* @LastEditors: 田鑫
|
||||
* @LastEditTime: 2024-06-11 14:55:41
|
||||
* @Description:
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @description 模拟的react的useEffect
|
||||
* @param fn
|
||||
* @param deps
|
||||
*/
|
||||
export function useEffect(fn: () => void | (() => any), deps: any[] = []) {
|
||||
const tract = new Error();
|
||||
const resFn = ref(() => { });
|
||||
if (deps.length === 0) {
|
||||
onMounted(() => {
|
||||
const res = fn();
|
||||
if (typeof res === 'function') {
|
||||
resFn.value = res;
|
||||
} else {
|
||||
resFn.value = () => { };
|
||||
}
|
||||
});
|
||||
} else {
|
||||
watch(
|
||||
() => deps,
|
||||
() => {
|
||||
resFn.value();
|
||||
const res = (() => {
|
||||
try {
|
||||
return fn();
|
||||
} catch (error) {
|
||||
console.error(tract);
|
||||
console.error(error);
|
||||
}
|
||||
})();
|
||||
if (typeof res === 'function') {
|
||||
resFn.value = res;
|
||||
} else {
|
||||
resFn.value = () => { };
|
||||
}
|
||||
},
|
||||
{ immediate: true, deep: true },
|
||||
);
|
||||
}
|
||||
onUnmounted(() => {
|
||||
resFn.value();
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user