useState 实现
- 因为 useEffect 在挂载后执行,所以配合 useState 在挂载后改变状态
function useHook(callback){
const [isRendered,setRendered] = useState(false);
useEffect(()=>{
setRendered(true);
},[])
if(!isRendered){
callback();
}
}
useMemo 实现
- useMemo的执行时机在渲染前计算并缓存,在 useLayoutEffect 之前执行
function useHook(callback){
useMemo(()=>{
callback()
},[])
}
useRef 实现
function useHook(callback){
const isRendered = useRef(false);
if(!isRendered.current){
isRendered.current = true;
callback();
}
}
useLayoutEffect 实现
function useHook(callback){
useLayoutEffect(()=>{
callback()
},[])
}