获取错误:“() => () => boolean”类型的参数不可分配给“EffectCallback”类型的参数

tak*_*aks 12 javascript typescript reactjs

我是打字稿的新手,当我尝试useEffect在 react 中使用打字稿时出现错误Argument of type '() => () => boolean' is not assignable to parameter of type 'EffectCallback'.,任何人都可以帮助我为什么会出现此错误?我把我的代码放在这里,任何帮助将不胜感激,

const useIsMounted = () => {
        const isMounted = React.useRef(false);
        React.useEffect(() => {
          isMounted.current = true;
          return () => isMounted.current = false;
        }, []);
        return isMounted;
    };
Run Code Online (Sandbox Code Playgroud)

Den*_*ash 20

useEffect( EffectCallbacktype)的函数应该返回voidor () => void | undefined

function useEffect(effect: EffectCallback, deps?: DependencyList): void;

type EffectCallback = () => (void | (() => void | undefined));
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您返回void => boolean

// void => boolean
return () => (isMounted.current = false);
Run Code Online (Sandbox Code Playgroud)

要修复它,请将作用域添加到清洁函数的语句中:

const useIsMounted = () => {
  const isMounted = React.useRef(false);
  React.useEffect(() => {
    isMounted.current = true;
    return () => {
      isMounted.current = false;
    };
  }, []);
  return isMounted;
};
Run Code Online (Sandbox Code Playgroud)