Skip to content
This repository has been archived by the owner on Sep 20, 2020. It is now read-only.

Latest commit

 

History

History
63 lines (43 loc) · 2.42 KB

serverside-rendering.md

File metadata and controls

63 lines (43 loc) · 2.42 KB

Serverside Rendering

Samples

To learn more you should have a look at our samples:

{% hint style="info" %} The usage of the reactI18nextModule for holding the i18n instance is not a valid option (the instance would be set globally). Always use the I18nextProvider like done in the samples above. {% endhint %}

For futher information see this issue.

Pass language and translations down to client

Both the i18nextProvider and translate hoc allows to pass in initialI18nStore and initialLanguage. By doing so the translations won't be loaded and initial clientside render will avoid any flickering or rerender by checksum mismatch.

For details check the docs of those components or have a look at the examples above.

loadNamespaces helper

loadNamespaces: Function that will pre-load all namespaces used by your components. Works well with react-router match function

props:

  • components: Components that need to have namespaces loaded.
  • i18n: the i18n instance to load translations into
import { I18nextProvider, loadNamespaces } from 'react-i18next';
import { match } from 'react-router';

match({...matchArguments}, (error, redirectLocation, renderProps) => {
   loadNamespaces({ ...renderProps, i18n: i18nInstance })
   .then(()=>{
      // All i18n namespaces required to render this route are loaded   
   })
});

use the i18next-express-middleware

When using i18next-express-middleware, you can use req.i18n as the i18next instance for I18nextProvider it will assert no request conflicts happen (each request gets it's cloned instance of i18next):

import { I18nextProvider } from 'react-i18next';
import i18n from './i18next'; // your own initialized i18next instance
import App from './app';

app.use((req, res) => {
   const component = (
      <I18nextProvider i18n={req.i18n}>
         <App />
      </I18nextProvider>
   );

   // render as desired now ...
});