Ich verwende i18-next
Bibliothek, um Sprachen in meiner App zu wechseln. So ist es getan, ohne eine Seite neu zu laden. Die Sprachumschaltung erfolgt über:Rect-Router v4. Wie fügt man einen Parameter an die URL an? TypeError: history.push ist keine Funktion
render() {
const toggle = lng => i18n.changeLanguage(lng);
return (
<a href="javascript:void(0)" onClick={()=>{ toggle();}}></a>
)
Ich würde solche Funktionalität machen: Sobald die Sprache gewechselt wird, fügen Sie zu einer URL einen Sprachparameter hinzu. Also, sobald Änderung ist aufgetreten sollte es aussehen: www.website.com/xx
Ich habe vor allem alle Themen in Bezug auf Rect-Router v4 und Geschichte gelesen, aber alle Vorschläge funktionierte nicht in meinem Projekt. Einige von ihnen beziehen sich auf veraltete Funktionen. Ich habe auch einige Beispiele mit withRouter versucht, aber nichts hat funktioniert ...
Wie könnte es in meinem Fall erreicht werden?
index.js:
import { Router, Route, Switch } from 'react-router-dom';
import createBrowserHistory from 'history/createBrowserHistory';
const customHistory = createBrowserHistory();
...
return (
<I18nextProvider i18n={i18n}>
<div>
<Router history={customHistory}>
<Switch>
<Route exact path="/:lng?" component={Page} />
<Route path={`/:lng?/someURL`} component={Page}/>
...
<Route component={NoMatch} />
</Switch>
</Router>
<ModalContainer />
</div>
</I18nextProvider>
)
Navigationskomponente:
handleClick() {
**append URL with lang param**
console.log(history);
-> history: History { length: 1, scrollRestoration: "auto", state: null }
history.push('/redirected');
-> TypeError: history.push is not a function
}
render() {
const toggle = lng => i18n.changeLanguage(lng);
return (
<a href="javascript:void(0)" onClick={()=>{ toggle(this.props.event); this.handleClick(); }}></a>
)
Sollte es mit der Funktion als handle() oder dieses Ereignis sollte global geschehen sein? Die Sprachen werden von mehreren Komponenten umgeschaltet.
React-Router V4.2.0