use-hook-kits
Version:
  
27 lines (24 loc) • 903 B
JavaScript
import { useState, useRef } from 'react';
import useDidMount from './useDidMount';
import useDeepEffect from './useDeepEffect';
const useDidUpdate = (factory, conditions) => {
const [hasMounted, setHasMounted] = useState(false);
const isUnMount = useRef(false);
if (typeof conditions !== "undefined" && !Array.isArray(conditions)) {
conditions = [conditions];
} else if (Array.isArray(conditions) && conditions.length === 0) {
console.warn(
"Using [] as the second argument makes useDidUpdate a noop. The second argument should either be `undefined` or an array of length greater than 0."
);
}
useDidMount(() => {
setHasMounted(true);
return () => isUnMount.current = true
});
useDeepEffect(() => {
if (hasMounted && !isUnMount.current) {
factory();
}
}, conditions);
}
export default useDidUpdate;