导出提供者函数和附着对象

Exporting provider functions and adhering object

我有 I18n 的代码:

import { I18nextProvider } from 'react-i18next';
import LngDetector from 'i18next-browser-languagedetector';
import i18n from 'i18next';

import common_en from "../locales/en/common.json";
import common_sv from "../locales/sv/common.json";

i18n
  .use(LngDetector)
  .init({
    resources: {
      en: {
        common: common_en
      },
      sv: {
        common: common_sv
      },
    },
  });

上面的代码像这样包装根应用程序:

document.addEventListener('DOMContentLoaded', () => {
  var root = document.getElementById('root');
  render(
    <I18nextProvider i18n={i18n}>
        <App/>
    </I18nextProvider>,
    root,
  )
})

这个模式会在代码中重复多次(有many React Apps instantiated throughout the whole application)。有什么方法可以导出第一部分,所以可以这样使用:

render(
  <ExportedI18nextProvider>
      <App/>
  </ExportedI18nextProvider>,
  root,
)
//ExportedI18nextProvider.js

export default class ExportedI18nextProvider extends React.Component{

    render(){
        var root = document.getElementById('root');
        return(
            <I18nextProvider i18n={i18n}>
                 {this.props.children} //children prop accessed here i.e. App Component
            </I18nextProvider>
        )
    }
}

在这里可以导入它以重用代码。

import ExportedI18nextProvider from 'some_path_to_ExportedI18nextProvider';

document.addEventListener('DOMContentLoaded', () => {

    render(
        <ExportedI18nextProvider>
            <App/>//this will be passed as children prop
        </ExportedI18nextProvider>,
        root,
      )
  })