老师我说一下我的理解:
首先视频里说的变乱就是每次+2。这是因为React严格模式下useEffect被调用了两次导致的,添加了清除定时器的回调函数之后会把第一次的定时器给清除掉。
这里涉及到的基础问题是useEffect的执行方式:useEffect会在组件渲染后执行,而且每次组件重新渲染时,都会先运行上一次useEffect中返回的清理函数,然后再执行新的useEffect。当组件卸载时,执行最后一次返回的清理函数,清除最后一次设定的定时器。
其次是闭包的问题:
定时器创建的内部函数是一个闭包,这里的count是创建之初的初始值0,并不是一个传进来的变量,如果不采用函数式更新,setCount每次取到的都是闭包里的count=0,所以count会一直等于0。而在setCount方法中采用函数式更新的时候,使用useState创建的更新函数会自动去获取对应setCount方法的count变量的最新值。