我正在尝试在我的React组件中使用useTranslation hook实现i18next,但它一直显示:
未捕获的错误:测试在渲染时暂停,但没有指定回退UI。
添加一个
<Suspense fallback=...>
组件到更高的树中提供加载指示器或占位符来显示。
我该如何将<Suspense>
添加到比我现在更高的位置?我做错了什么?我该如何解决这个问题?当我使用<Translation>
组件时似乎可以正常工作。当然,如果我关闭Suspense并尝试自己处理它,它似乎也可以正常工作,但我认为这有点违背了初衷。我该如何使其正常工作?我是否配置了Fetch后端错误?
Test.js
import React, { Suspense, useState, useEffect, lazy } from "react";
import PropTypes from "prop-types";
import i18n from './i18n';
import { useTranslation } from 'react-i18next';
export default function Test( props ){
const { t, i18n } = useTranslation( 'bingo_game' );
return (
<Suspense fallback={<div>Loading...</div>}>
<div>
Pant leg
</div>
</Suspense>
)
}
Test.propTypes = {
token: PropTypes.string.isRequired,
};
并且
i18n.js
import i18n from "i18next";
import LngDetector from "i18next-browser-languagedetector";
import { initReactI18next } from "react-i18next";
import Fetch from "i18next-fetch-backend";
i18n
.use(LngDetector) //language detector
.use(Fetch)
.use(initReactI18next)
.init({
backend: {
loadPath: "/infra/locales/{{ns}}.json",
// path to post missing resources
addPath: "locales/add/{{ns}}",
// define how to stringify the data when adding missing resources
stringify: JSON.stringify
},
defaultNS: "base",
fallbackLng: "en",
debug: true,
initImmediate: false
});
export default i18n;
我已经查看了所有能找到的文档,以及这篇不涉及我的问题的SO帖子。
Lazy
,但是添加以下代码:const { t, i18n } = lazy(() => useTranslation( 'bingo_game' ));
似乎可以解决这个问题,但在更复杂的组件中可能不适用 - 这是正确的做法吗? - Micah Gideon Modell