Ich benutze Apollo für die Authentifizierung meiner nextJS-Anwendung. Jetzt brauche ich i18n Unterstützung hinzufügen und ich einige grundlegende Probleme gegenüber:ReactJS: Wie man die Komponente injiziert und die Variable in der erweiterten Komponente übergibt, statt mit der Funktion
Vor allem das Problem class Index extends React.Component
zu handhaben ist, das ist, wie meine page und die Komponenten wie gegen die Funktion Version im example verwendet aussieht.
In der Dokumentation ist dieses Beispiel gibt, wie man eine Seite der Anwendung implementieren i18next:
import React from 'react';
import Link from 'next/link';
import { translate } from 'react-i18next';
import i18n from '../i18n';
function Index({ t, initialI18nStore }) {
return (
<div>
{t('welcome')}
<p>{t('common:integrates_react-i18next')}</p>
<Link href="/page2"><a>{t('link.gotoPage2')}</a></Link>
</div>
);
}
const Extended = translate(['home', 'common'], { i18n, wait: process.browser })(Index);
// Passing down initial translations
// use req.i18n instance on serverside to avoid overlapping requests set the language wrong
Extended.getInitialProps = async ({ req }) => {
if (req && !process.browser) return i18n.getInitialProps(req, ['home', 'common']);
return {};
};
export default Extended;
Aber meine Seite verwendet class Index extends React.Component
. So kann ich nicht t
und initialI18nStore
in meine Komponente implementieren. Auch verstehe ich nicht, wie die getInitialProps
hinzufügen in meine bestehenden:
Seite
import React from 'react'
import cookie from 'cookie'
import { withApollo, compose } from 'react-apollo'
import withData from '../lib/withData'
import redirect from '../lib/redirect'
import checkLoggedIn from '../lib/checkLoggedIn'
class Index extends React.Component {
static async getInitialProps (context, apolloClient) {
const { loggedInUser } = await checkLoggedIn(context, apolloClient)
if (!loggedInUser.user) {
// If not signed in, send them somewhere more useful
redirect(context, '/signin')
}
return { loggedInUser }
}
render() {
return (
<div>
Hello {this.props.loggedInUser.user.name}!<br />
<button onClick={this.signout}>Sign out</button>
</div>
)
}
};
export default compose(
withData,
withApollo
)(Index)
Zwei Probleme mit diesem ist: 't' wird in der Rückkehr von render (nicht definiert) und' Typeerror: i18n.getInitialProps ist keine Funktion. – user3142695
Ersetzen Sie es durch 'this.props.t'. und das Dokumentationsbeispiel hat 'Import i18n von '../ i18n'' Sie müssen dieses Modul ähnlich bekommen. Überprüfen Sie das aktualisierte Snippet. –
Ich habe die i18n.js bereits in meine server.js und in meine Auslagerungsdatei importiert. Ich bekomme immer noch den Fehler 'TypeError: i18n.getInitialProps ist keine Funktion'. – user3142695