如何在 React 应用程序中迭代 i18n 对象数组?
How to iterate i18n array of objects in React app?
我在我的 React 应用程序中使用 i18n 包来翻译一些文本。但是我无法遍历作为我的翻译数据的对象数组。
我想遍历 socials
数组并将其显示在我的模板中。但是当我这样做时,它说:socials.map is not a function
这是我的翻译 json 文件:
{
"socials": [
{
"name": "Github",
"url": "#"
},
{
"name": "Twitter",
"url": "#"
},
{
"name": "Linkedin",
"url": "#"
},
{
"name": "Instagram",
"url": "#"
}
]
}
这是我的 jsx 代码:
import { useTranslation } from 'react-i18next';
const Content = () => {
const { t, i18n } = useTranslation();
const socials = t('socials', { returnObjects: true });
rerurn (
<div className="flex">
{socials.map((social) => (
<a href={social.url}>{social.name}</a>
))}
</div>
);
}
export default Content;
如何解决这个问题?
您的翻译可能是延迟加载的,您也可能没有使用 Suspense。这意味着翻译还没有为第一次渲染做好准备,您需要检查就绪标志:https://react.i18next.com/latest/usetranslation-hook#not-using-suspense
import { useTranslation } from 'react-i18next';
const Content = () => {
const { t, i18n, ready } = useTranslation();
if (!ready) return 'loading translations...';
const socials = t('socials', { returnObjects: true });
rerurn (
<div className="flex">
{socials.map((social) => (
<a href={social.url}>{social.name}</a>
))}
</div>
);
}
export default Content;
我在我的 React 应用程序中使用 i18n 包来翻译一些文本。但是我无法遍历作为我的翻译数据的对象数组。
我想遍历 socials
数组并将其显示在我的模板中。但是当我这样做时,它说:socials.map is not a function
这是我的翻译 json 文件:
{
"socials": [
{
"name": "Github",
"url": "#"
},
{
"name": "Twitter",
"url": "#"
},
{
"name": "Linkedin",
"url": "#"
},
{
"name": "Instagram",
"url": "#"
}
]
}
这是我的 jsx 代码:
import { useTranslation } from 'react-i18next';
const Content = () => {
const { t, i18n } = useTranslation();
const socials = t('socials', { returnObjects: true });
rerurn (
<div className="flex">
{socials.map((social) => (
<a href={social.url}>{social.name}</a>
))}
</div>
);
}
export default Content;
如何解决这个问题?
您的翻译可能是延迟加载的,您也可能没有使用 Suspense。这意味着翻译还没有为第一次渲染做好准备,您需要检查就绪标志:https://react.i18next.com/latest/usetranslation-hook#not-using-suspense
import { useTranslation } from 'react-i18next';
const Content = () => {
const { t, i18n, ready } = useTranslation();
if (!ready) return 'loading translations...';
const socials = t('socials', { returnObjects: true });
rerurn (
<div className="flex">
{socials.map((social) => (
<a href={social.url}>{social.name}</a>
))}
</div>
);
}
export default Content;