React.Suspense
Suspense 是什么
主要是用来处理还没有完成的事情(也就是异步,异步加载组件,异步请求数据)
Suspense 的主要解决问题其实是对于异步操作会多次 state 变化的问题。
Suspense 是用来做什么的?
代码拆分
服务于打包优化的代码拆分。lazy 和 suspense 配合使用
const A = React.lazy(() => import('./A'))
return (
<Suspense fallback={<p>loading</p>}>
<Route component={A} path="/a">
</Suspense>
)
当路由切换时,加载新的组件代码,代码加载是异步的过程,此时 suspense 就会进如 fallback,那我们看到的就是 loading,显式的告诉用户正在加载,当代码加载完成就会展示 A 组件的内容,整个 loading 状态不用开发者去控制。
异步加载数据
更新
export type SuspenseState = {|
alreadyCaptured: boolean,
didTimeout: boolean,
timedOutAt: ExpirationTime,
|};
if (finishedWork.effectTag & Callback) {
const newState: SuspenseState = {
alreadyCaptured: true,
didTimeout: false,
timedOutAt: NoWork,
};
finishedWork.memoizedState = newState;
scheduleWork(finishedWork, Sync);
return;
}
最后更新于
这有帮助吗?