অপরিশোধিত সম্পত্তিটির 'ইতিহাস' পড়তে পারে না (রিঅ্যাক্ট রাউটার 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 থেকে .1 5.1.2 এ আপডেট করেছি এবং এটি সমাধান হয়ে গেছে। আপনি খেয়াল করতে পারেন যে এটি useHistoryএকটি উপ-উপাদানে রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.