参考答案

useEffect可以看成是 componentDidMountcomponentDidUpdatecomponentWillUnmount 三者的结合。

useEffect(callback, [source])接收两个参数,调用方式如下:

useEffect(() => { console.log('mounted'); return () => { console.log('willUnmount'); } }, [source]);

生命周期函数的调用主要是通过第二个参数[source]来进行控制,有如下几种情况:

  • [source]参数不传时,则每次都会优先调用上次保存的函数中返回的那个函数,然后再调用外部那个函数;
  • [source]参数传[]时,则外部的函数只会在初始化时调用一次,返回的那个函数也只会最终在组件卸载时调用一次;
  • [source]参数有值时,则只会监听到数组中的值发生变化后才优先调用返回的那个函数,再调用外部的函数。