Ich verwende den neuen useHistory-Hook von React Router, der vor einigen Wochen herauskam. Meine React-Router-Version ist 5.1.2. Meine Reaktion ist in Version 16.10.1. Sie finden meinen Code unten.
Wenn ich jedoch die neue useHistory vom React-Router importiere, wird folgende Fehlermeldung angezeigt:
Uncaught TypeError: Cannot read property 'history' of undefined
was durch diese Zeile im React-Router verursacht wird
function useHistory() {
if (process.env.NODE_ENV !== "production") {
!(typeof useContext === "function") ? process.env.NODE_ENV !== "production" ? invariant(false, "You must use React >= 16.8 in order to use useHistory()") : invariant(false) : void 0;
}
return useContext(context).history; <---------------- ERROR IS ON THIS LINE !!!!!!!!!!!!!!!!!
}
Da es sich um useContext handelt und möglicherweise ein Konflikt mit dem Kontext vorliegt, habe ich versucht, alle Aufrufe von useContext vollständig zu entfernen, den Provider zu erstellen usw. Dies hat jedoch nichts bewirkt. Versucht mit React v16.8; gleiche Sache. Ich habe keine Ahnung, was dies verursachen könnte, da alle anderen Funktionen des React-Routers einwandfrei funktionieren.
*** Beachten Sie, dass dasselbe beim Aufrufen der anderen React-Router-Hooks wie useLocation oder useParams passiert.
Hat das noch jemand erlebt? Irgendwelche Ideen, was dies verursachen könnte? Jede Hilfe wäre sehr dankbar, da ich im Internet nichts zu diesem Thema gefunden habe.
import React, {useEffect, useContext} from 'react';
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import { Switch, useHistory } from 'react-router'
import { useTranslation } from 'react-i18next';
import lazyLoader from 'CommonApp/components/misc/lazyLoader';
import {AppContext} from 'CommonApp/context/context';
export default function App(props) {
const { i18n } = useTranslation();
const { language } = useContext(AppContext);
let history = useHistory();
useEffect(() => {
i18n.changeLanguage(language);
}, []);
return(
<Router>
<Route path="/">
<div className={testClass}>HEADER</div>
</Route>
</Router>
)
}