反应更新卸载的组件
React updating unmounted component
所以我有这个功能可以从我的 API 中获取播放列表,然后更新状态。
我的问题是,如果我在 API 仍在获取数据时更改路由,它会尝试更新组件,即使它不再安装。这会导致以下控制台错误:
Warning: Can only update a mounted or mounting component. This usually means you called setState, replaceState, or forceUpdate on an unmounted component. This is a no-op.
我想知道避免这种冲突的最佳做法是什么。
提前感谢您的回答!
async getUserPlaylists() {
let data = await request({ path: '/playlists' });
data = data || [];
const sanitizedPlaylists = data.map((item, index) => ({
key: index,
name: item.name,
imageUrl: item.imageUrl,
...item,
}));
this.setState({
playlists: sanitizedPlaylists,
loadingPlaylists: false,
submitting: false,
});
return request.data;
}
您可以尝试在 componentWillUnmount
中中止请求,这应该会导致 Promise 无法解析:
this.request = request({ path: '/playlists' });
let data = await this.request;
componentWillUnmount() {
if (this.request) this.request.abort();
}
或者只设置一个标志:
componentWillUnmount() {
this.unmounted = true;
}
并在调用之前检查它 setState
:
if (this.unmounted) return;
this.setState(...)
尽管所有这些可能都是不必要的并发症。您可以忽略开发中的警告。
所以我有这个功能可以从我的 API 中获取播放列表,然后更新状态。
我的问题是,如果我在 API 仍在获取数据时更改路由,它会尝试更新组件,即使它不再安装。这会导致以下控制台错误:
Warning: Can only update a mounted or mounting component. This usually means you called setState, replaceState, or forceUpdate on an unmounted component. This is a no-op.
我想知道避免这种冲突的最佳做法是什么。
提前感谢您的回答!
async getUserPlaylists() {
let data = await request({ path: '/playlists' });
data = data || [];
const sanitizedPlaylists = data.map((item, index) => ({
key: index,
name: item.name,
imageUrl: item.imageUrl,
...item,
}));
this.setState({
playlists: sanitizedPlaylists,
loadingPlaylists: false,
submitting: false,
});
return request.data;
}
您可以尝试在 componentWillUnmount
中中止请求,这应该会导致 Promise 无法解析:
this.request = request({ path: '/playlists' });
let data = await this.request;
componentWillUnmount() {
if (this.request) this.request.abort();
}
或者只设置一个标志:
componentWillUnmount() {
this.unmounted = true;
}
并在调用之前检查它 setState
:
if (this.unmounted) return;
this.setState(...)
尽管所有这些可能都是不必要的并发症。您可以忽略开发中的警告。