Javascript 如何取消ComponentWillUnmount中的所有请求?
根据,ComponentWillUnmount能够取消请求 我有一个页面,请求加载iframe,以及其他页面请求。如果用户决定在页面仍在处理请求时离开该页面,我如何取消这些请求,从而不影响用户此后访问的其他页面Javascript 如何取消ComponentWillUnmount中的所有请求?,javascript,reactjs,Javascript,Reactjs,根据,ComponentWillUnmount能够取消请求 我有一个页面,请求加载iframe,以及其他页面请求。如果用户决定在页面仍在处理请求时离开该页面,我如何取消这些请求,从而不影响用户此后访问的其他页面 我应该注意,我使用的是Redux和Redux saga。只要把组件将卸载作为一个opportunity函数就可以了。这是您的机会,可以按照文档中的说明执行React自己无法完成的任何额外清理 就XHR请求而言,您需要一个支持取消承诺的承诺库。如果您使用的库确实支持这一点,那么在组件wil
我应该注意,我使用的是Redux和Redux saga。只要把
组件将卸载作为一个opportunity函数就可以了。这是您的机会,可以按照文档中的说明执行React自己无法完成的任何额外清理
就XHR请求而言,您需要一个支持取消承诺的承诺库。如果您使用的库确实支持这一点,那么在组件willunmount
中,您只需确保您有权访问所有承诺并取消每个承诺即可
至于取消任何其他内容,您只需要使用为您提供的函数来取消您想要取消的内容。如果它们是一个取消它的函数,那么如果您需要在卸载组件时取消它,请使用组件willunmount
的性质来执行此操作
举个例子来说明我们在我所处的位置是如何使用它的:如果一个组件要发出请求,我们在该组件上设置一个属性,该属性是一个数组并保存所有请求。我们称之为this.statePromissions
。无论何时提出请求/承诺,我们都会将该承诺写入this.statePromissions
。在组件willunmount
中,我们有以下内容
componentWillUnmount() {
this.statePromises.forEach(p => p.cancel());
}
p是一个承诺。这仅仅是因为图书馆,蓝鸟,我们用我们的承诺。但这会让您了解如何使用组件willunmount
进行任何额外的清理 从技术上讲,您不能取消或中止承诺,因为web浏览器不公开任何执行此操作的方法
相反,如果用户导航到另一个页面,您可以忽略这个承诺。有两种方法可以做到这一点:
使用Redux、Thunk和promise中间件
您不应该将应用程序状态存储在组件状态中。通过使用Redux,应用程序状态将在所有组件之间共享。然后与中间件结合使用,在Redux中处理异步操作
简单地说,在你的行动中,你可以这样做:
case 'LOAD_ORDERS_SUCCESS':
if state.location != 'orders' { return }
// store the data in the application state
使用RxJS和可观测值
可观察性是承诺的另一种方式
有一个叫做Netflix的库和一个来自Netflix的库,它解释了如何准确地使用Observable。在他们的文档中查看此信息:
const fetchUserEpic = action$ =>
action$.ofType(FETCH_USER)
.mergeMap(action =>
ajax.getJSON(`/api/users/${action.payload}`)
.map(fetchUserFulfilled)
.takeUntil(action$.ofType(FETCH_USER_CANCELLED))
);
组件将卸载
无法取消“请求”。这是一个你应该进行任何必要清理的地方。这到底是什么取决于你在做什么,与反应无关。因此,如果您有一个关于中止加载iframe的特定问题,您应该问这个问题(同样,这与React无关)。然而,已经有一个问题: