【发布时间】:2021-11-03 01:09:12
【问题描述】:
我正在使用一些非常标准的 create-react-app 样板,它使用延迟加载和 react-i18next 作为翻译库。该库使用 i18next-http-backend 从远程 API 获取翻译文件。
我想了解的是,React.suspense 究竟如何能够“识别”这个异步调用,并在完成之前显示回退 UI。
Index.ts 文件:
import "./i18n";//Notice this
const container = document.getElementById("root");
ReactDOM.render(
<StylesProvider jss={jss}>
<ThemeProvider theme={theme}>
<React.StrictMode>
<BrowserRouter>
<Router />
</BrowserRouter>
</React.StrictMode>
</ThemeProvider>
</StylesProvider>,
container
);
i18n 文件:
i18n
.use(Backend)
.init({
backend:{
loadPath: 'https://someRemoteApi/dictionary',
})
路由器:
const Home = lazy(() => import("../../modules/home/Home"));
const Router: React.FC = (props) => {
return (
<>
<ErrorBoundary>
<Suspense fallback={<div className={styles.loader}><Loader /></div>}>
<Switch>
<ProtectedRoute exact component={Home} path="/"/>
...more routes
</Suspense>
</ErrorBoundary>
</>
);
};
通过这个设置,令我惊讶的是,后备会在屏幕上呈现,直到这个后端插件完成它的工作。我正在尝试了解它的机制,以及这是否可以用于其他异步操作。
React 文档明确指出:
React.Suspense 允许你指定加载指示器,以防万一 它下面的树中的组件尚未准备好呈现。今天, 延迟加载组件是唯一支持的用例
:
任何澄清将不胜感激。
【问题讨论】:
标签: javascript reactjs