【发布时间】:2019-06-17 00:48:15
【问题描述】:
请看这里:https://reactjs.org/blog/2015/12/16/ismounted-antipattern.html 还有这里:How to cancel a fetch on componentWillUnmount 在这里:ismounted antipattern, track own property
在这两种情况下,他们都提到了 3 种方法:
- 在您的
promise.resolve中检查this.IsMounted(),如果 `Compounted Has Unmounted ,React 将为您正确返回
- 在您的
promise.resolve中检查_isMounted,这是您在ComponentWillUnmount()方法中手动跟踪的。 - 使用可取消的承诺,这样你
promise永远不会解决。 这将解决你所有的问题,让它变得可爱。
除了,在第三种情况下,您的 promise 将 error(),但在其他情况下也可能是 error()(例如 API 已关闭)。
所以实际上第三个选项归结为:
- 在您的promise.error 中检查errorPayload.IsCancelled,这是您在cancellablePromise 对象中手动跟踪的,而该对象又由ComponentWillUnmount 中的手动调用触发。
所以这三个几乎相同:
当您处理
promise结果时,请检查与组件是否已经有unmounted直接相关的此变量的值。
为什么他们断言第 3 个选项比其他 2 个更好,并且第 1 个选项是反模式。
【问题讨论】:
标签: javascript reactjs