#reactjs #i18next #react-i18next
#reactjs #i18next #react-i18next
Вопрос:
я начинаю использовать I18next в своем приложении react. — > https://react.i18next.com/latest/using-with-hooks
я использую с помощью theyre hook {useTranslation}
но проблема и раздражающая ситуация в том, что мне нужно писать это снова и снова в каждом компоненте:
import { useTranslation } from "react-i18next";//////////////this
const example = () => {
const { t, i18n } = useTranslation();////////////////// and this
return (
<>
<p>{t("Thanks.1")}</p>
странно, что это способ его реализации,
есть способ объявить его глобально и просто повторно использовать во всех моих приложениях?
Комментарии:
1. Вы можете создать одноранговый (компонент высокого порядка), который передает метод всем дочерним компонентам. Эти компоненты должны просто получить prop и вызвать метод.
2. это будет работать с функциональными компонентами?
3. Я думаю, что HOC может быть функциональным компонентом, но его реализация может быть немного сложной, особенно в typescript
4. но мне это не помогает, мне нужно передать реквизиты любому компоненту… его также выглядит messy…to добавляйте реквизит к каждому компоненту { t, i18n }. выглядит странно
5. Это не волшебный трюк, вам нужен доступ к
t
функции для перевода, есть 2-3 способа сделать это: 1. useTransaltion hook, 2. withTranslation HOC, 3. импортировать экземпляр напрямую (не рекомендуется в приложениях React)
Ответ №1:
export const ExampleComponent_2 = ({t}) => {
return (
<p>{t("Thanks.2")}</p>
)
}
export const ExampleComponent_2 = ({t}) => {
return (
<p>{t("Thanks.1")}</p>
)
}
в верхнем контейнере используйте его
import { useTranslation } from "react-i18next";
export const App = ({ t }) => {
return (
<ExampleComponent_1 t={t}/>
<ExampleComponent_2 t={t}/>
)
}