使用 react-i18next 在 React 中设置翻译文档标题(HTML 标签)的最佳方法
Best way to set translated document title (HTML tag) in React with react-i18next
目前我正在我的功能组件中设置文档标题,如下所示:
useEffect(() => { document.title = 'My title' }, []);
我希望我的网站支持不同的语言,所以我实现了 react-i18next
。
我有按钮来更改调用下面函数的语言。这会立即更改我网页上的字符串。
const changeLanguage = (lng) => {
i18n.changeLanguage(lng);
}
将前面提到的代码更改为下面的代码有效(注意 t('...')
函数),但仅限于页面加载。如果我按下我的语言按钮,页面标题不会更新。
useEffect(() => { document.title = t('My title') }, []);
我怎样才能做到这一点?
传递给其他组件的字符串也存在同样的问题。例如
// inside parent
<ChildComponent title={t('My title')} />
// inside child
<h1>{props.title}</h1>
你的第一个问题是 useEffect
上的空 Array
,你告诉 React 只执行 onMount
里面的代码,这意味着当你更新你的语言时,这个函数不会被触发。要解决这个问题,请使用如下内容:
useEffect(() => { document.title = t('My title') }, [lang]);
我无法重现第二个问题。确保如果您更改语言,子道具会重新呈现。使用简单的 console.log('rendered');
进行测试
目前我正在我的功能组件中设置文档标题,如下所示:
useEffect(() => { document.title = 'My title' }, []);
我希望我的网站支持不同的语言,所以我实现了 react-i18next
。
我有按钮来更改调用下面函数的语言。这会立即更改我网页上的字符串。
const changeLanguage = (lng) => {
i18n.changeLanguage(lng);
}
将前面提到的代码更改为下面的代码有效(注意 t('...')
函数),但仅限于页面加载。如果我按下我的语言按钮,页面标题不会更新。
useEffect(() => { document.title = t('My title') }, []);
我怎样才能做到这一点?
传递给其他组件的字符串也存在同样的问题。例如
// inside parent
<ChildComponent title={t('My title')} />
// inside child
<h1>{props.title}</h1>
你的第一个问题是 useEffect
上的空 Array
,你告诉 React 只执行 onMount
里面的代码,这意味着当你更新你的语言时,这个函数不会被触发。要解决这个问题,请使用如下内容:
useEffect(() => { document.title = t('My title') }, [lang]);
我无法重现第二个问题。确保如果您更改语言,子道具会重新呈现。使用简单的 console.log('rendered');