अपरिभाषित की संपत्ति 'इतिहास' नहीं पढ़ सकते हैं (प्रतिक्रिया रूटर 5 का उपयोग करें)


18

मैं रिएक्ट राउटर के नए उपयोगहिस्टोर हुक का उपयोग कर रहा हूं, जो कुछ सप्ताह पहले सामने आया था। मेरा रिएक्ट-राउटर संस्करण 5.1.2 है। मेरा प्रतिक्रिया संस्करण 16.10.1 पर है। आप नीचे मेरा कोड पा सकते हैं।

फिर भी जब मैं रिएक्शन-राउटर से नया उपयोग करता हूं, तो मुझे यह त्रुटि मिलती है:

Uncaught TypeError: Cannot read property 'history' of undefined

जो रिएक्ट-राउटर में इस लाइन के कारण होता है

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 !!!!!!!!!!!!!!!!!
}

चूंकि यह कॉन्टेक्स्ट का उपयोग करने से संबंधित है और शायद संदर्भ के साथ संघर्ष में गलती है, मैंने पूरी तरह से कॉन्टेक्स्ट का उपयोग करने के लिए सभी कॉल हटाने की कोशिश की, प्रदाता को बनाया, आदि। हालांकि, कुछ भी नहीं किया। प्रतिक्रिया v16.8 के साथ की कोशिश की; वही चीज। मुझे नहीं पता कि यह क्या कारण हो सकता है, क्योंकि रिएक्टर राउटर की हर दूसरी विशेषता ठीक काम करती है।

*** ध्यान दें कि एक ही बात तब होती है जब अन्य रिएक्ट राउटर हुक को कॉल करते हैं, जैसे कि यूटीलोकेशन या यूजपराम।

क्या किसी और का इससे सामना हुआ है? इसका क्या कारण हो सकता है? किसी भी मदद की बहुत सराहना की जाएगी, क्योंकि मुझे इस मुद्दे से संबंधित वेब पर कुछ भी नहीं मिला।

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>
    )
}

जवाबों:


31

इसका कारण यह है कि प्रतिक्रिया-राउटर संदर्भ उस घटक में सेट नहीं है। चूंकि इसका <Router>घटक उस संदर्भ को सेट करता है जिसे आप useHistoryउप-घटक में उपयोग कर सकते हैं , लेकिन उस एक में नहीं।


धन्यवाद ब्रायन। यह वास्तव में मुद्दे का कारण था। :)
रादु स्टर्ज़ु

1
दोह, इतना स्पष्ट है जब आपने इसे इंगित किया, धन्यवाद
जेसन रोजर्स

6

अन्य लोगों को ध्यान दें जो इस समस्या में भाग लेते हैं और पहले से ही राउटर घटक के साथ घटक को लपेटते हैं। सुनिश्चित करें कि राउटर और उपयोगहिस्टर हुक एक ही पैकेज से आयात किए गए हैं। एक ही त्रुटि को फेंक दिया जा सकता है जब उनमें से एक को प्रतिक्रिया-राउटर से आयात किया जाता है और दूसरा एक प्रतिक्रिया-राउटर-डोम से और उन पैकेजों के पैकेज संस्करण मेल नहीं खाते हैं। दोनों का उपयोग न करें, यहां अंतर के बारे में पढ़ें ।


2

मैंने अपने react-router-dom5.0.0 से ^ 5.1.2 तक अपडेट किया और यह हल हो गया है। आप देख सकते हैं कि useHistoryउप-घटक में है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.