Skip to content

useMount

typescript
// 正常写useMount
import { useEffect } from 'react';
const useMount = (fn: () => void) => {
    useEffect(() => {
        fn();
    }, [])
}

ahooks工具库的严谨性

相比于上面的代码 ahooks的源码实现多了fn?.();,在typescript环境中我们发现这个fn这个参数是必填的,但是为什么ahooks源码里面会有这一段fn?.(),由于这个工具库是可以在Js环境下运行的

typescript
import { useEffect } from 'react';
import { isFunction } from '../utils';
import isDev from '../utils/isDev';

const useMount = (fn: () => void) => {
  if (isDev) {
    if (!isFunction(fn)) {
      console.error(
        `useMount: parameter \`fn\` expected to be a function, but got "${typeof fn}".`,
      );
    }
  }

  useEffect(() => {
    fn?.();
  }, []);
};

export default useMount;

const useUnmount = (fn: () => void) => {
	useEffect(() => {
		return () => {
			fn?();
		}
	}, []);
}
  • 如果在js环境下写这一行代码,编译器不会报任何错误,但是如果fn不加?.,那可能会直接报错。学到了作为一个Js工具库的严谨程度应该是什么样子的
javascript
useMount('test');