业务类型是:
每个路由进入的时候,componentDidMount
时,都会去ajax异步调用接口,接收到数据的时候进行setState
操作。
但是当我快速切换路由的时候,因为之前的component已经销毁了,但是ajax还进行中,返回时setState了已经销毁的component。会报错如下错误
Warning: setState(...): Can only update a mounted or mounting component. This usually means you called setState() on an unmounted component. This is a no-op. Please check the code for the MyDepartmentTrace component.
想到的解决方案
1、取消ajax请求,abort掉。但是如果多个ajax,fetch之类的不是要维护好多,每次请求都要存一下?或者怎么组织这些请求
2、success回调中判断component还是否存在,这个this. isMounted()
貌似也不推荐用了,也得自己维护一套组件是否已经销毁了的代码,在mount和unmount中写入。然后setState的时候先检测下有没有被销毁了,感觉这个也麻烦
这种场景,一般都是如何避免的?