mirror of https://github.com/usememos/memos
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
26 lines
713 B
TypeScript
26 lines
713 B
TypeScript
import React, { useEffect, useRef, EffectCallback, DependencyList } from "react";
|
|
|
|
const useIsoMorphicEffect = (effect: EffectCallback, deps?: DependencyList | undefined) => {
|
|
useEffect(effect, deps);
|
|
};
|
|
|
|
function useLatestValue<T>(value: T) {
|
|
const cache = useRef(value);
|
|
|
|
useIsoMorphicEffect(() => {
|
|
cache.current = value;
|
|
}, [value]);
|
|
|
|
return cache;
|
|
}
|
|
|
|
// TODO: Add React.useEvent ?? once the useEvent hook is available
|
|
function useEvent<F extends (...args: any[]) => any, P extends any[] = Parameters<F>, R = ReturnType<F>>(
|
|
cb: (...args: P) => R
|
|
) {
|
|
const cache = useLatestValue(cb);
|
|
return React.useCallback((...args: P) => cache.current(...args), [cache]);
|
|
};
|
|
|
|
export default useEvent;
|