解读 ahooks 源码系列 - LifeCycle 篇
本篇文章是解读 ahooks@3.8.0 源码系列的第三篇 - LifeCycle 篇,欢迎您的指正和点赞。
本文主要解读 useMount、useUnmount、useUnmountedRef 的源码实现。
useMount
import { isFunction } from "@/utils";
import isDev from "@/utils/isDev";
import { useEffect } from "react";
const useMount = (fn: () => void) => {
if (isDev) {
if (!isFunction(fn)) {
console.error(
`useMount: parameter \`fn\` expected to be a function, but got "${typeof fn}".`
);
}
}
// 在组件首次渲染时,执行方法
useEffect(() => {
fn?.();
}, []);
};
export default useMount;
useUnmount
import { isFunction } from "@/utils";
import isDev from "@/utils/isDev";
import useLatest from "../useLatest";
import { useEffect } from "react";
const useUnmount = (fn: () => void) => {
if (isDev) {
if (!isFunction(fn)) {
console.error(
`useUnmount expected parameter is a function, got ${typeof fn}`
);
}
}
const fnRef = useLatest(fn);
useEffect(
// 组件卸载时,执行函数
() => () => {
fnRef.current();
},
[]
);
};
export default useUnmount;
useUnmountedRef
import { useEffect, useRef } from "react";
const useUnmountedRef = () => {
const unmountedRef = useRef(false);
useEffect(() => {
// 组件挂载,unmountedRef.current 置为 false
unmountedRef.current = false;
return () => {
// 组件卸载,unmountedRef.current 置为 true
unmountedRef.current = true;
};
}, []);
return unmountedRef;
};
export default useUnmountedRef;
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 解读 ahooks 源码系列 - Effect 篇
下一篇: VSCode C++ 环境配置
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论