react usePersistFn

import {useRef,} from 'react';

function usePersistFn(fn) {
  const fnRef = useRef(fn);
  fnRef.current = fn;

  const persistFn = useRef();
  if (!persistFn.current) {
    persistFn.current = function (...args) {
      return fnRef.current.apply(this, args);
    }
  }

  return persistFn.current;
}


export {
  usePersistFn
}

  

 

 

 

 

 

import {useCallback, useRef} from 'react';
import {shallowEqual} from "../utils/shallowEqual";

function usePersistFn(fn: any) {
    const fnRef = useRef(fn);
    fnRef.current = fn;
    return useCallback((...params: any) => {
        return fnRef.current(...params);
    }, []);
}


function usePersistFn2(fn: any, checkParams: boolean = false) {
    const preParamsRef = useRef(null);

    const fnRef = useRef(fn);
    fnRef.current = fn;

    return useCallback((params: any) => {
        if (checkParams && shallowEqual(preParamsRef.current, params)) {
            return;
        }
        preParamsRef.current = params;
        return fnRef.current(params);
    }, []);
}


export {
    usePersistFn,
    usePersistFn2
}

  

 

posted on 2023-03-22 17:02  袜子破了  阅读(63)  评论(0编辑  收藏  举报