React-i18next 悬念

Che*_*ian 8 reactjs react-i18next

我正在使用 React-i18next 就像示例一样

import React, { Suspense } from 'react';
import { useTranslation } from 'react-i18next';

function App() {
  return (
    <Suspense fallback="loading">
      <MyComponent />
   </Suspense>
   );
}
Run Code Online (Sandbox Code Playgroud)

但是 Suspense 正在破坏我的其他组件之一,即 react-masonry-layout。是否可以不使用 Suspense?

谢谢。

小智 13

react-i18nnext 默认使用 Suspense。如果您不想使用它,则必须在配置中指定它。如果您有 i18n 配置文件,则可以在 init 对象的 react 部分将 useSuspense 标志设置为 false。

//Example config
i18n
.use(Backend)
.use(LanguageDetector)
.use(initReactI18next)
.init({
   fallbackLng: "en",
   debug: true,
   resources: {

   },
   interpolation: {
     escapeValue: false,
   },
  react: {
     wait: true,
     useSuspense: false,
  },
})
Run Code Online (Sandbox Code Playgroud)

或者您可以在组件中设置标志。

<MyComponent useSuspense={false} />
Run Code Online (Sandbox Code Playgroud)

请注意,选择不使用 Suspense 有其含义。您必须编写检查来处理“未准备好”状态,即:在状态未准备好时渲染加载组件,并在状态准备好时渲染您的组件。不这样做将导致在加载之前渲染您的翻译。

  • Suspense 是实验性的 - 我们应该在生产系统中使用它吗?我有点惊讶这是react-i18next 的官方推荐? (6认同)