useEffect清理函数中的unsubscribe机制究竟如何工作?
为什么返回订阅引用能实现取消订阅?
这是React的useEffect和Redux的订阅机制配合的结果,拆成两点就明白:
React useEffect的清理逻辑
当你在useEffect的回调里返回一个函数时,这个函数会被React认定为清理函数。它会在两个时机自动执行:一是组件从DOM中卸载时,二是当前effect的依赖项更新、需要重新执行effect之前。作用就是清理effect里创建的各类资源,避免内存泄漏。Redux subscribe的返回值作用
Redux的store.subscribe()方法在注册完状态监听回调后,会返回一个取消订阅函数。只要调用这个函数,之前注册的那个监听回调就会被移除,后续store的状态变化再也不会触发它。
所以代码里return unsubscribe,就是把Redux提供的取消订阅函数交给React,让React在合适的时机自动调用它,从而完成订阅的清理——既能避免组件卸载后还监听store导致的内存泄漏,也能防止重复订阅引发的无效状态更新。
内容的提问来源于stack exchange,提问作者JCraine
相关产品推荐
相关产品推荐

