Как работает I18nextProvider с пространствами имен в react-i18next?

Я использую react-i18next в своем приложении с I18nextProvider и withNamespaces.

export const App = () => (
    <I18nextProvider i18n={i18n}>
      <App />
    </I18nextProvider>
);
export default withNamespaces()(ChildComponentOfApp);

но я не понимаю отношения I18nextProvider и withNamespaces. они не передают реквизиты, такие как функция t

Провайдер отвечает за передачу экземпляра i18next, переданного реквизитами, всем объектам рендеринга withNamespaces или NamespacesConsumer с использованием API контекста реакции.

Почему работа? этот рендер поддерживает что-то в withNamespaces?

Я знаю, что withNamespaces — это HOC, но перепутал эту связь между I18nextProvider и withNamespaces даже после прочтения исходного кода react-i18next.

может кто-нибудь объяснить?


person jinma    schedule 26.03.2019    source источник


Ответы (1)


I18nextProvider -> вы передаете реквизит "i18n", содержащий экземпляр i18next для использования -> провайдер передает его вниз по дереву JSX, используя контекстный API реакции

withNamespaces -> получает экземпляр i18n из контекста и передает функцию t вашему компоненту.

person jamuhl    schedule 26.03.2019
comment
Большое спасибо, @jamuhl!! Я понимаю намного лучше, чем раньше. Хорошо, мой следующий шаг — проверить дерево JSX с помощью контекстного API реакции в официальном документе. - person jinma; 26.03.2019