React: Concept: Hook: useEffect Basic

 28th February 2021 at 10:25am

useEffect 中的语句会 在组件第一次绘制后才执行。这一般是被期望的行为,比如你在 useEffect 中监听事件,不影响浏览器展示内容时。如果你需要在绘制前就执行,用 useLayoutEffect;它除了初次被执行时间不一样外,其他都是一致的。

React 提供了在某些变量有变化时才触发执行的能力。比如下面的 props.source

useEffect(
  () => {
    const subscription = props.source.subscribe();
    return () => {
      subscription.unsubscribe();
    };
  },
  [props.source],
);

如果你只想在组件 mount 和 umount 时执行语句,而不想其中 render 时也执行,那么可以用空的依赖变量:

useEffect(
  () => {
    const subscription = props.source.subscribe();
    return () => {
      subscription.unsubscribe();
    };
  },
  [],
);